我有一个课程项目,我们有两个阵列(高和低),我们将在一个月内每天存储高温和低温。我们需要一个与众不同的数字,所以如果输入数据的人忘记了一天的临时数,那就是默认数字(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++;
}
}
}
答案 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++;
}