2015-08-25 2 views
1

2-й вопрос! (followup to my first) Теперь я пытаюсь перечислить первый массив (namesArray) и сопоставить каждый индекс с определяемым пользователем количеством часов в часахArray. Поэтому он спрашивает, сколько людей работало в течение недели, затем спрашивает их имена, затем спрашивает часы, когда каждый из этих людей работал (показывая свои имена в сторону для улучшения качества).java, два 2D-массива и их взаимодействия, ArrayIndexOutOfBounds Exception

Я продолжаю получать исключение IndexOutOfBounds всякий раз, когда я пытаюсь ввести первое количество часов, отработанных первым человеком, как исправить это, чтобы правильно исправить количество часов, отработанных каждым человеком?

import java.util.Scanner; 
import java.util.Arrays; 

class Tips_Calc 
{ 
public static void main(String[] args) 
{ 
    Scanner scan = new Scanner(System.in); 

    System.out.print("How many employees for the week?: "); 
    int numberOfEmps = scan.nextInt(); 

    int numberOfHours = 0; 


    System.out.println("\nEnter names of workers up to the entered amount (" + numberOfEmps + "):"); 


    String[] namesArray = new String[numberOfEmps]; 
    for(int i = 0; i < numberOfEmps; i++) 
    { 
     namesArray[i] = scan.next(); 
    } 


    System.out.println("\nEnter the amount of hours each person worked for the week: "); 

    float[] hoursArray = new float[numberOfHours]; 
    for(int n = 0; n < namesArray.length; n++) 
    { 
     int counter = 0; // <------ do i even need this variable? 
     System.out.print(namesArray[n] + ": "); 
     hoursArray[counter] = scan.nextFloat(); // <------ the error is here! 
     System.out.println("\n"); 
     counter++; 
    } 
} 
} 
+0

Вы получаете исключение IndexOutofBoundsException или исключение ArrayIndexOutOfBoundsException? , вы должны объявить переменную счетчика вне цикла for. – Stultuske

ответ

4

Ваш hoursArray пуст:

int numberOfHours = 0; 
.... 
float[] hoursArray = new float[numberOfHours]; 

Так hoursArray[counter] будет сгенерировано исключение. Вы, вероятно, хотите этот массив, чтобы иметь такую ​​же длину, как и другой массив:

float[] hoursArray = new float[namesArray.length]; 
0

IndexOutofBounds может быть две вещи:

1) Либо доступ к полю, которое не существует (например, массив с длина 5 и вы получаете доступ к индексу [5] (массивы начинаются с нуля !, поэтому последний является [4])

2) или ваше поле еще не было инициализировано.

также вы можете избавиться от переменной счетчика в этом месте. вы всегда будете получать счетчик == 0, поскольку у вас есть инициализация внутри цикла. Инициализируйте его за пределами цикла и увеличивайте его внутри после/перед каждым циклом.

+0

Я только что нашел более элегантное решение для вашего счетчика. Просто используйте «n», который рассчитывает на цикл. Вы используете его уже (распечатываете), и по мере того, как вы увеличиваете его после цикла (начиная с нуля в цикле), вы можете просто удалить «счетчик» и заменить его «n» variable ==> hoursArray [counter] = > hoursArray [n]. Чем меньше переменных, тем больше у вас получится. – Cribber

Смежные вопросы