如何使用while循环将用户输入输入到数组中,同时保持某些数字不变

时间:2016-01-22 02:05:56

标签: java arrays methods while-loop user-input

我有一个课程项目,我们有两个阵列(高和低),我们将在一个月内每天存储高温和低温。我们需要一个与众不同的数字,所以如果输入数据的人忘记了一天的临时数,那就是默认数字(510是我选择的)。所以我现在拥有的是一个打印出当天但是所有温度都是510的程序。有人可以向我解释我需要对while循环做什么来获取输入的信息进入正确的高低数组吗?还有一种方法可以输入任何东西(如果记录温度的人忘记采取高温的温度)并保持510度?

    import java.util.Scanner;

导入javax.swing.JOptionPane;

公共课程天气{

public static void main(String[] args) {
    // TODO Auto-generated method stub



    int [] high = new int[30];
    int [] low = new int[30];
    //switch to 32
    Init (high);
    Init(low);

    Report(low,high);
    LoadData(low,high);
    Report(low, high);
}
public static void Init(int A[])
{
    for(int i = 0; i < A.length; i++)
    {
        A[i] = 510;
    }
}

public static void Report(int[] H, int[] L)
{
    System.out.println("Day    High    Low");

    for(int i = 0; i < H.length; i++)
    {
        System.out.println(i + "      " + H[i] + "      " + L[i]);
    }
}
public static void LoadData(int[] H, int[] L)
{

    int day = 0;
    while(day <= 30)
    {


        int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high"));
        int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low"));

        H[day] = high;
        H[day] = low;
        day++;
        }
}

}

3 个答案:

答案 0 :(得分:0)

我尝试了你的代码,几乎工作正常。

你有两个错误:

int day = 0;
while(day <= 30)
{
    int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high"));
    int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low"));

    H[day] = high;
    L[day] = low;
    day++;
}

你的int []数组被初始化为int[30]所以它只包含30个元素,因为你的循环条件是day&lt; = 30,它实际上会尝试输入第31个元素,这将会引发例外。如果我将条件更改为day < 30,您的程序会正确报告温度。

您的另一个错误是,您要将同一数组分配为低和高,只需将H[day] = low;更改为L[day] = low;

对于'空白输入'要求,我建议将循环更改为for循环:

for(int day = 0; day < H.length; day++) {
  String low, high;

  high = JOptionPane.showInputDialog("please enter the high");
  low = JOptionPane.showInputDialog(" Please enter the low");

  if(high.equals("") || low.equals(""))
    continue;

  H[day] = Integer.parseInt(high);
  L[day] = Integer.parseInt(low);

}

这段代码的作用是,如果用户输入一个空白字符串,它会跳过循环的其余部分并进入下一个循环,实际上保持默认值不变。

答案 1 :(得分:0)

使用try和catch,这里有一个你可以做的例子:

while(day < 30)
{
   int highTemp = 0;
   int lowTemp = 0;
   String high = JOptionPane.showInputDialog("please enter the high");
   String low = JOptionPane.showInputDialog(" Please enter the low");
   try {
       highTemp = Integer.parseInt(high);
   } catch(NumberFormatException e){
       highTemp = 510;
   }
   try {
       lowTemp = Integer.parseInt(low);
   } catch(NumberFormatException e){
       lowTemp = 510;
   }
   H[day] = highTemp;
   L[day] = lowTemp;
   day++;
}

基本上这里发生的是输入首先作为字符串被接收,然后程序尝试解析它。如果出现故障(例如空输入),则默认值为510。

请注意代码中有关while条件的错误:

在:

while(day <= 30)

while(day < 30)

如果你做了&#39;&lt; =&#34;,就会有一个数组超出范围的例外,因为你的温度数组的长度只有30(意味着最后一个索引值是在索引29)

此外,您没有更改温度值分配到此处的数组:

在:

H[day] = highTemp;
H[day] = lowTemp;

后:

H[day] = highTemp;
L[day] = lowTemp;

如果将低温和高温两者都分配给高温数组,那么你只是在控制数组值。

另外,在您的公共静态void main(String [] args){}&#39;

在:

Report(low, high);
LoadData(low, high);
Report(low, high);

后:

Report(high, low);
LoadData(high, low);
Report(high, low);

您的方法首先需要高温阵列,而不是低温阵列。在您的代码中,您将低温指定为高温。

答案 2 :(得分:0)

你写了

while(day <= 30)
{


    int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high"));
    int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low"));

    H[day] = high;
    H[day] = low;
    day++;
    }

看你没有尝试/捕获来处理异常,你写了H[day] = high;H[day] = low;这么低的数组将始终保持510所有元素。
你可以简单地修复它使用尝试抓取

注意:当数组的长度为30时,您可以访问索引在0 to 29之间的元素,因此while循环while(day <= 30)的条件不正确。

使用此代码:

    int day = 0;
    while (day < 30) {

        try {
            int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high"));
            H[day] = high;
        } catch (HeadlessException | NumberFormatException | NullPointerException e) {
        }

        try {

            int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low"));
            L[day] = low;

        } catch (HeadlessException | NumberFormatException | NullPointerException e) {
        }

        day++;
    }