I'm doing an assignment trying to manipulate an array of ints (grades). It's crashing and I can't figure out why. I don't know if it has something to do with the file input, output? the error log seems to be saying it isn't even getting past running the method onclick.
main activity code:
package com.example.brandon.lab5;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.*;
import android.content.res.*;
import java.io.*;
import java.util.*;
import java.util.Scanner;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void arrayChange(View view)
throws IOException {
EditText et;
TextView tv;
String fileName;
tv = (TextView) findViewById(R.id.text_main);
et = (EditText) findViewById(R.id.edit_infile);
int n=0;
AssetManager assetManager = getAssets();
fileName = (et.getText().toString());
Scanner fsc = new Scanner(assetManager.open(fileName));
int grades[] = new int[100];
while(fsc.hasNext()) {
grades[n] = fsc.nextInt();
n++;
}
int fromIndex = 0;
int toIndex = grades.length;
int size = grades.length;
double cubicMean = 0;
double num = 0;
double deno = size;
while(size>0) {
num+=Math.pow(grades[size], 3);
size--;
}
cubicMean = Math.cbrt((num/deno));
Arrays.sort(grades, fromIndex, toIndex);
double med = 0;
double temp = Math.ceil(grades[(toIndex/2)]);
if(toIndex%2==0) {
med = ((grades[toIndex/2] + grades[(toIndex/2)+1])/2);
}
else {
med = temp;
}
tv.append("Number of grades: " + grades.length);
tv.append("Highest grade: " + grades[0]);
tv.append("Cubed root of the grades: " + cubicMean);
tv.append("Median grade: " + med);
File outfile = new File(getExternalFilesDir(null), "out.txt");
FileWriter fw = new FileWriter(outfile);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
while(size>0) {
pw.println(grades[size]);
size--;
}
pw.close();
}
}
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.brandon.lab5">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
XML
<?xml version="1.0" encoding="utf-8"?>
<!-- your context in the "tools:context" field below. See YYY -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.brandon.lab5.MainActivity"
tools:showIn="@layout/activity_main">
<EditText
android:id="@+id/edit_infile"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="@string/edit_infile" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:onClick="arrayChange"
android:text="Start" />
<!-- Spacing and horizontal rule (line) to separate Button from TextView -->
<Space
android:layout_width="match_parent"
android:layout_height="10dp" />
<View
android:layout_width="fill_parent"
android:layout_height="0.5dp"
android:background="#000000" />
<Space
android:layout_width="match_parent"
android:layout_height="10dp" />
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">
<TextView
android:id="@+id/text_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="..." />
</ScrollView>
</LinearLayout>
logcat:
--------- beginning of crash
12-04 23:16:22.456 3056-3056/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.brandon.lab5, PID: 3056
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.util.InputMismatchException
at java.util.Scanner.next(Scanner.java:973)
at java.util.Scanner.nextInt(Scanner.java:1318)
at java.util.Scanner.nextInt(Scanner.java:1282)
at com.example.brandon.lab5.MainActivity.arrayChange(MainActivity.java:72)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
12-04 23:16:22.457 1514-1646/system_process W/ActivityManager:
Here's the problematic code:
From the docs of
Scanner#nextInt()
:Double-check your file content.