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

How to use a while loop to enter user input into an array while keeping certain numbers unchanged

我有一个 class 项目,我们有两个数组(高和低),我们将存储一个月中每一天的高温和低温。我们需要一个不寻常的数字,这样如果将信息输入数组的人忘记了一天的温度,它将是默认数字(510 是我选择的)。所以我目前拥有的是一个打印出当天但所有温度均为 510 的程序。有人可以向我解释我需要对 while 循环做什么才能让输入的信息进入正确的高低数组吗?还有什么方法可以不输入任何内容(如果记录温度的人忘记测量高温)并保持 510 度?

    import java.util.Scanner;

导入javax.swing.JOptionPane;

public class天气{

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++;
        }
}

}

我试过你的代码,它几乎工作正常。

你这里有两个错误:

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 <= 30,它实际上会尝试输入第 31 个元素,这将引发和异常。如果我将条件更改为 day < 30,您的程序会正确报告温度。

你的另一个错误是你将 low 和 high 都分配给同一个数组,只需将 H[day] = low; 更改为 L[day] = low;

对于 'blank input' 要求,我建议将循环更改为 for-loop:

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);

}

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

使用 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)

如果你让它成为'<=',将会出现数组越界异常,因为你的温度数组只有 30 的长度(意味着最后一个索引值在索引 29 处)

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

之前:

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

之后:

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

如果你将低温和高温都分配给高温数组,你只是over-riding你的数组值分配。

此外,在您的 'public static void main(String[]args){}'

之前:

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

之后:

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

您的方法首先要求高温阵列,而不是低温阵列。在您的代码中,您将低温分配给高温。

你写了

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++;
    }

看起来你没有 try/catches 来处理异常,你写了 H[day] = high;H[day] = low; 所以低数组将始终为所有元素保持 510。
您可以简单地使用 try catches.

来修复它 注意:当数组的长度为 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++;
    }