Проблема с использованием массива Java

import java.io.*;
public class Array {
public static void main(String args[]) throws IOException { BufferedReader inpt = new BufferedReader(new InputStreamReader(System. in )); System.out.println("How many criteria?");//ask for how many records int n = Integer.parseInt(inpt.readLine());// store in n int[] arrayCrit = new int[n];//create array with size n String[] crits = new String[n]; //**as you mentioned in edit you want to take all the input before printing** for (int i = 0; i < n; i++) { System.out.print("Criteria: "); crits[i] = inpt.readLine(); System.out.print("Percentage: "); arrayCrit[i] = Integer.parseInt(inpt.readLine()); } System.out.println("How many students' record?"); int n1 = Integer.parseInt(inpt.readLine()); int [] arrayCritr = new int [n1]; String [] arraySname = new String [n1]; for(int i=0; i
<ul> <li> Сколько критериев? 4</li> <li> Критерии: опрос</li> <li> Процент: 25</li> <li> Критерии: Att</li> <li> Процент: 15</li> <li> Критерии: основной экзамен</li> <li> Процент: 40</li> <li> Критерии: Малый экзамен</li> <li> Процент: 20</li> <li> Сколько учеников записано? 2</li> <li> Имя студента: Wayne</li> <li> Оценка в викторине: 90</li> <li> Оценка в Att: 80</li> <li> Оценка в Att: 70</li> </ul> <p> Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 2 в Array.main(Array.java:41)</p> <p> Процесс завершен.</p> <p> (Еще раз спасибо людям, которые помогли мне раньше)</p> <p> Здравствуйте, еще раз, я столкнулся с другой проблемой для этой программы. Вышеприведенный результат несколько ошибочен. Массивы не работают очень хорошо. Название 3-го класса должно быть основным экзаменом, но каким-то образом оно не двигается, и оно застряло там. Также я хочу знать, как сбросить значение, чтобы второй студент мог ввести оценки. Еще раз, мне нужна ваша помощь, поскольку я новичок в java, и я изучаю ее. Спасибо.</p> <p> Изменение: Мне нужно вывести что-то вроде этого..</p> <ul> <li> Сколько критериев? 4</li> <li> Критерии (1): Опрос</li> <li> Процент: 25</li> <li> Критерии (2): Посещаемость</li> <li> Процент: 25</li> <li> Критерии (3): основной экзамен</li> <li> Процент: 25</li> <li> Критерии (4): Малый экзамен</li> <li> Процент 25</li> <li> Сколько учеников записано? 2</li> <li> Имя студента (1): Гарольд</li> <li> Оценка в викторине: 90</li> <li> Оценка в посещаемости: 85</li> <li> Оценка по специальности: 95</li> <li> Оценка в Малом экзамене: 89</li> <li> Имя студента (2): Джейн</li> <li> Оценка в викторине: 80</li> <li> Оценка в посещаемости: 75</li> <li> Оценка по крупному экзамену: 87</li> <li> Оценка в Малом экзамене: 93</li> </ul> <p> Это именно то, что мне нужно показать. Я прошу сделать невозможное?</p>
4 ответа

Вы Crits свой массив Crits в Crits crits[i]= crits [i + 1]; '

Вскоре все критерии будут перезаписаны последним. Вы уже начали видеть, что в первом бите вывода:

Student Name: Wayne
Grade in Quiz: 90
Grade in Att: 80
Grade in Att: 70

Но на самом деле вам нужно прямо в голову понять, что означает каждый массив, что означает каждый счетчик циклов. Это полезно сделать с псевдокодом:

get number of criteria
get each criteria as input
get number of students
for each student in students: output student name for each c in criteria: output criteria for this student

Когда вы посмотрите на свой код, вы обнаружите, что ваша структура не подходит к этому очень хорошо. Не меняйте массив критериев - изменяйте только там, где вы указываете массив (т.е. Индекс).

В этом контексте полезно использовать более значимые имена переменных: numStudents и numCriteria, а также studentIndex и criteriaIndex вместо n, n1, i, j. Как только вы это сделаете, все будет очищено, и проблема станет очевидной.


вы перебираете от 0 до n на arrayCritr, но инициализируете arrayCritr с помощью n1, оба из которых поступают из пользовательского ввода.

если n будет больше n1 чем вы получите это исключение.

в вашем случае n равно 4, а n1 - 2, поэтому вы получите исключение.

либо измените цикл for для использования n1

for(int j=0; j
<p> или инициализировать <code>arrayCritr с n

int [] arrayCritr = new int [n];


Ваш arrayCritr имеет размер n1, но вы используете индекс от 0 до n. Когда ваш n> n1, вы получите эту ошибку. Изменить следующий код:

arrayCritr [j] = Integer.parseInt(inpt.readLine());

в

arrayCritr [i] = Integer.parseInt(inpt.readLine());

также имея arrayCritr в вашем вложенном цикле, не имеет смысла, поэтому вы лучше двигаете его выше.


Эта линия ближе к концу:

for(int j=0; j
<p> Разве это не должно быть</p> <pre class="prettyprint linenums">for(int j=0; j</pre><code> <p> Вы используете неверный предел массива.</p>

licensed under cc by-sa 3.0 with attribution.