如何解决如何确定哈希表中的一对值是否满足条件?
我试图在数组中输入值对 (i,j) 以确定其中有多少对符合以下条件:1
public static void main(String[] args) {
int oldVal[][] = new int [20][2];
boolean loopAgain = true;
Scanner scan = new Scanner(system.in);
int num = 0;
int i = 0;
do {
System.out.print("Enter input 1:");
int input1 = scan.nextInt();
System.out.print("Enter input2:");
int input2 = scan.nextInt();
oldVal[i][0] = input1;
oldVal[i][1] = input2;
i++;
System.out.print("Enter another input (y/n)?");
String answer = scan.next();
if (answer.equals("y") || answer.equals("Y")) {
continue;
} else {
for (int x = 0; x < oldVal.length; x++) {
if (oldVal[x][0] <= 1 && oldVal[x][0] < oldVal[x][1] && oldVal[x][1] <= 20) {
num++;
}
}
System.out.print("Output number is %d.\n" + num);
break;
}
} while (loopAgain);
scan.close();
}
}
谢谢!
解决方法
你的 if 条件不好。您的伪代码声明 1
if (1 <= oldVal[x][0] && oldVal[x][0] < oldVal[x][1] && oldVal[x][1] <= 20) {
num++;
}
另一方面,用于检查“y”输入的 if 条件的设计很糟糕,您应该简单地否定条件并去掉 continue 语句。我还会使用正则表达式,这样用户可以输入 y、Y、是、是、是、是、是、是、是,所有这些都可以工作。此外,可以使用 for each(或增强 for)来改进 for 循环。此外,为了代码可读性,您应该在 if 块内和 for 循环之前声明 num 变量。另外,如果在打印输出后使用 break 语句离开 while 循环,loopAgain 的用途是什么?只需写 while(true)
,或者最好添加一个 loopAgain=false
而不是 break。添加所有这些更改将导致:
if (!answer.matches("[yY].*")) {
int num = 0;
for (int[] ints : oldVal) {
if (1 <= ints[0] && ints[0] < ints[1] && ints[1] <= 20) {
num++;
}
}
System.out.printf("Output number is %d.%n",num);
loopAgain=false;
}
另外,注意如果你想使用 %d 的东西,你应该调用 System.out.printf(不是 println),而不是 \n 你应该使用 %n。
既然它工作正常,我建议你更新到 java 16 并研究做它的新方法(使用 Stream
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。