【问题标题】:java, two 2D arrays and their interactions, ArrayIndexOutOfBounds Exceptionjava,两个二维数组及其交互,ArrayIndexOutOfBounds 异常
【发布时间】:2015-08-25 08:57:43
【问题描述】:

第二个问题! (跟进我的第一个)我现在尝试列出第一个数组 (namesArray) 并将每个索引与用户定义的 hoursArray 小时数进行匹配。所以它会询问一周有多少人工作,然后询问他们的姓名,然后询问每个人的工作时间(同时将他们的姓名显示在侧面以提高质量)。

每当我尝试输入第一个人的第一个工作小时数时,我不断收到 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++;
    }
}
}

【问题讨论】:

  • 您收到 IndexOutofBoundsException 还是 ArrayIndexOutOfBoundsException ?您应该在 for 循环之外声明计数器变量。

标签: java arrays exception user-defined


【解决方案1】:

您的hoursArray 为空:

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

所以hoursArray[counter] 会抛出异常。 您可能希望此数组与另一个数组具有相同的长度:

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

【讨论】:

    【解决方案2】:

    IndexOutofBounds 可以是两件事:

    1) 要么访问一个不存在的字段(例如,一个长度为 5 的数组,然后访问索引 [5]​​ (数组从零开始!所以最后一个是 [4])

    2) 或您的字段尚未初始化。

    你也可以去掉那个地方的计数器变量。您将始终得到 counter==0,因为您在循环内部进行了初始化。在循环外部初始化它,并在每个循环之后/之前递增它。

    【讨论】:

    • 我刚刚为您的计数器找到了一个更优雅的解决方案顺便说一句:只需使用对循环计数的“n”。您已经使用它(打印出来)并且在循环之后增加它(因此在循环中从零开始)您可以删除“计数器”并将其替换为“n”变量 ==> hoursArray[counter] = > 小时数组[n]。您拥有的变量越少,您获得的概览就越多。
    猜你喜欢
    • 2015-12-08
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2019-05-26
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多