【问题标题】:How to use a while loop to enter user input into an array while keeping certain numbers unchanged如何使用 while 循环将用户输入输入到数组中,同时保持某些数字不变
【发布时间】:2016-01-22 02:05:56
【问题描述】:

我有一个班级项目,我们有两个数组(高温和低温),我们将存储一个月内每天的高温和低温。我们需要一个不同寻常的数字,因此如果将信息输入数组的人忘记了一天的温度,那将是默认数字(我选择了 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++;
        }
}

}

【问题讨论】:

  • 它并没有在我身上跳出来,但我可以建议在 Integer.parseInt() 行之后添加一些调试行吗?尝试类似:int high = Integer.parseInt(JOptionPane.showInputDialog("please enter the high"));int low = Integer.parseInt(JOptionPane.showInputDialog(" Please enter the low"));System.out.println("Day: " + day + " high: " +high + " low: " + low); 看看打印出来的内容

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


【解决方案1】:

你写的

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/catch 来处理异常,并且你写了 H[day] = high;H[day] = low; 所以低数组将始终为所有元素保持 510。
你可以简单地使用 try 修复它捕获

注意:当数组的长度为 30 时,您可以访问索引在 0 to 29 之间的元素,因此您的 while 循环 while(day &lt;= 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++;
    }

【讨论】:

  • 您能否解释一下这些对我的代码有什么作用“HeadlessException | NumberFormatException | NullPointerException e”,以便我将来知道。谢谢!
  • 当你使用 parseInt(string) 时它会抛出 NumberFormatException 所以你必须捕捉它以避免在你的应用程序中崩溃,当你使用 JOptionPane.showInputDialog(...) 它会抛出 HeadlessException ,所以你必须捕捉它。此时NullPointerException 不会出现在您的代码中,您可以将其删除。
  • 当我摆脱 'HeadlessException' 时,代码仍然有效,为什么我需要为 'JOptionPane.showIputDialog()' 使用它?当我查看 oracle 文档时,我并没有真正理解它的含义。
  • 看看这个话题:HeadlessException.
【解决方案2】:

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

这里有两个错误:

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

}

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

【讨论】:

    【解决方案3】:

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

    如果设置为 '

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

    之前:

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

    之后:

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

    如果你将低温和高温都分配给高温数组,你只是覆盖了你的数组值分配。

    另外,在您的“public static void main(String[]args){}”中

    之前:

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

    之后:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2013-11-16
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      相关资源
      最近更新 更多