#java #android #crash
#java #Android #сбой
Вопрос:
Я пытаюсь создать приложение, которое проверяет буквенную оценку ученика. Пользователь выбирает имя учащегося из списка, и отображаются имя и буквенная оценка. Когда я пытаюсь запустить программу, я продолжаю получать сбои.
Вот мой Java-код:
public class GradeChecker extends AppCompatActivity {
//Variable and object declaration
TextView name;
TextView ltrGrade;
Spinner spinner;
int nameColor = getResources().getColor(R.color.name_color);
int gradeColor = getResources().getColor(R.color.grade_color);
float textSize = getResources().getDimension(R.dimen.textsize);
BufferedReader reader;
ArrayList<String> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grade_checker);
//Object initialization
name = (TextView) findViewById(R.id.displayName);
ltrGrade = (TextView) findViewById(R.id.displayltrGrade);
ltrGrade.setTextColor(gradeColor);
ltrGrade.setTextSize(textSize);
name.setTextSize(textSize);
spinner = (Spinner)findViewById(R.id.spinner);
//Read data from file
try {
AssetManager am = getAssets();
InputStream input = am.open("grades.txt");
reader = new BufferedReader(new InputStreamReader(input));
String line = reader.readLine().replaceAll("Name", "").replaceAll("Test1", "").replaceAll("Test2", "").replaceAll("[0-9]]", "");
while (line != null) {
list.add(line);
} input.close();
} catch (IOException e) {
name.setText("Student not found");
}
ArrayAdapter<String> dataAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item);
dataAdapter.notifyDataSetChanged();
spinner.setAdapter(dataAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
//Reading data for spinner items
try {
AssetManager am = getAssets();
InputStream input = am.open("grades.txt");
reader = new BufferedReader(new InputStreamReader(input));
String line = reader.readLine();
String na = reader.readLine().replaceAll("[0-9]", " ");
String gr = reader.readLine().replaceAll("[A-za-z]", " ");
String[] str = gr.split(" ");
int[] numbers = new int[str.length];
for (int x = 0; x < numbers.length; x ) {
numbers[x] = Integer.parseInt(str[i]);
Arrays.sort(numbers);
}
String total = Arrays.toString(numbers);
int avg = Integer.parseInt(total) / str.length;
while (line != null) {
name.setText(na);
if (avg >= 93) {
ltrGrade.setText("A");
}
if (avg >= 88 amp;amp; avg != 93) {
ltrGrade.setText("B ");
}
if (avg >= 83 amp;amp; avg != 88) {
ltrGrade.setText("B");
}
if (avg >= 78 amp;amp; avg != 83) {
ltrGrade.setText("C ");
}
if (avg >= 73 amp;amp; avg != 78) {
ltrGrade.setText("C");
}
if (avg >= 65 amp;amp; avg != 72) {
ltrGrade.setText("D");
}
if (avg < 65) {
ltrGrade.setText("F");
}
} input.close();
} catch (IOException e) {
name.setText("Student not found");
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
}
Буду признателен за любую помощь.
Комментарии:
1. Пожалуйста, поделитесь подробностями «сбоя», например, содержимым logcat.
2. Одна вещь, которая выскакивает, это
Integer.parseInt(total)
. Это не сработает, потомуtotal
что выглядит как[1, 2, 3, 4]
, который не может быть представлен как целое число.3. не могли бы вы опубликовать код пользовательского интерфейса xml?
4. Ваша логика присвоения оценки также неверна. Например, 95% — это «D», потому что оно больше 65% и не равно 72%. Большинство операторов «if» должны быть операторами «else if». Также неясно, почему вы делаете такие вещи, как «среднее значение! = 93» — полностью удалите эти условия, они бессмысленны.
5. @rajatIIT
NumberFormatException
не являетсяIOException
.