debugging 调试有时有效的布尔循环语句

2exbekwf  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(95)

我正在学习用Java编写代码,我正在努力解决需要布尔变量的问题。注意-不,这不是家庭作业。我在自学。
我遇到的问题是,有时我的代码对这个问题的工作,其他时候,它不。我把这个问题放到NetBeans中来检查是否有语法错误,但我没有找到任何语法错误,所以我希望有人能更好地说明应该如何编写代码。
教科书上的问题:声明一个名为allValid的布尔变量。然后,从输入中读取整数numInts,表示接下来要读取的整数的数量。使用循环从输入中读取剩余的整数。如果所有的numInts整数都在1到10的范围内(包括1和10),则将allValid赋值为true。否则,将allValid赋值为false。
如果allValid为true,则main()末尾的代码输出“All valid”,如果allValid为false,则输出“Has non-matching value(s)”。
例如:如果输入为:
则输出为:

有不匹配的值

我的答案是教科书式的问题(我写的代码在我放了一行星号的地方之间):

import java.util.Scanner;

public class IntegerData {
public static void main(String [] args) {
Scanner scnr = new Scanner(System.in);

int numInts;
****************My code starts****************
boolean allValid = true;
int newInput;
int i;
  
numInts = scnr.nextInt();
  
for(i=0; i<numInts; ++i) {
newInput = scnr.nextInt();
  
if (((newInput > 0) && (newInput < 11))) {
allValid = true;
}
  
else {
allValid = false;
}
}
**************My code ends********************        
if (allValid) {
System.out.println("All valid");
}

else {
System.out.println("Has non-matching value(s)");
}
}
}

字符串
例如,以下数字起作用:11,-2,5,12,-1,14(输出“Has non-matching value(s)”以下数字不起作用,例如:6、2、12、4、9(输出“全部有效”)
不,它与>10和<0没有任何关系,因为负数有时也会得到不正确的输出。

rjzwgtxy

rjzwgtxy1#

您当前正在达到一个false值,然后继续进行下一个循环迭代,这将覆盖allValid的前一个值,从而有效地使循环的最终结果变得重要。
相反,您可以将allValid设置为true作为初始值,然后将其设置为false,直到达到无效值。您不需要将allValid设置回true,因为一旦它失败,它应该保持失败。
下面看看修改后的代码

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    int numInts = scnr.nextInt();

    boolean allValid = true;
    for (int i = 0; i < numInts; i++) {
        int newInput = scnr.nextInt();
        // Any value lower than 1 OR above 10 fails
        if (newInput < 1 || newInput > 10) {
            allValid = false;
        }
    }

    if (allValid) {
        System.out.println("All valid");
    } else {
        System.out.println("Has non-matching value(s)");
    }
}

字符串
注意:我还做了一些小的修改,比如只在需要的范围内声明变量。
测试运行:

4
-1 2 3 4
Has non-matching value(s)

6
4 8 3 9 9 1
All valid

llew8vvj

llew8vvj2#

你给出了2,5,20作为有问题的输入。20大于10。(20 < 11)为false。另外,你不应该需要这么多的括号。这应该可以工作:

if (newInput > 0 && newInput < 11) {
allValid = true;
}

字符串

相关问题