我在java中的循环不起作用。谁能明白为什么?

时间:2015-11-19 02:19:50

标签: java loops

我很快就会有一个编程实验室。在我要求输入后,我的程序停止了。我看不出我做错了什么。有谁能看到这个问题?

public static double dReadInputs(int numberOfInputs)        //this accepts and fills an array with grade inputs
{
    int t = 0;
    double[] inputs = new double[numberOfInputs];
    while (t < numberOfInputs)
    {
        JOptionPane.showInputDialog("Please enter 10 grade values one at a time: ");
        inputs[10] = Integer.parseInt(in.nextLine());
        t++;
    }
    return inputs[10];

3 个答案:

答案 0 :(得分:1)

inputs[10]中的索引10会引发异常,因为它可能大于inputs变量的大小。

这可能适用于您的情况:

inputs[t] = Integer.parseInt(in.nextLine()); 

答案 1 :(得分:1)

public static double[] dReadInputs(int numberOfInputs)        //this accepts     and fills an array with grade inputs
{
    int t = 0;
    double[] inputs = new double[numberOfInputs];
    while (t < numberOfInputs)
    {
        JOptionPane.showInputDialog("Please enter "+numberOfInputs+"grade values one at a time: ");
        inputs[t] = Integer.parseInt(in.nextLine());
        t++;
    }
    return inputs;
}

基本上,你想得到所有的输入,所以你想要返回一个双数组而不是一个双数组。另外,请确保使用计数器(或者甚至更好地创建for循环),以便更新双精度数组中的相应双精度。

当你只有一个大小为10的数组时,你总是写入数组中的第11项,所以它给出了一个ArrayOutOfBoundsException。

答案 2 :(得分:1)

根据我对你的问题描述的理解。您希望JOptionPane显示10次,每次都接受输入并将其分配给数组。见下文:

public static double[] dReadInputs(int numberOfInputs)       
    {
        int t = 0;
        double[] inputs = new double[numberOfInputs];
        while (t < numberOfInputs)
        {
            String in = JOptionPane.showInputDialog("Please enter value for grade " + (t + 1) + " : ");
            inputs[t] = Double.parseDouble(in);
            t++;
        }
        return inputs;
    }

您还可以保护代码免受可能的 NullPointerException 的影响,这可能发生在用户不提供输入并使用取消关闭按钮。解决方案:

if (in != null) {
  //inform user to enter valid +ve integer/double
  //you might wanna continue back to loop without incrementing t 
} 

您可以通过确保用户始终输入有效数字而不保留其他内容来保护代码免受 NumberFormatException 的影响。即使是空输入对话也会导致异常:解决方案:

try {
    inputs[t] = Double.parseDouble(in);
} catch(NumberFormatException nfe) {
  //inform user to input valid +ve integer/double
  //you might wanna continue back to loop without incrementing t
}