如何使用 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++;
}
我有一个 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++;
}