为什么不工作呢?

时间:2012-02-29 01:53:46

标签: java for-loop if-statement

用户输入3个数字,我假设所有都是正确的整数和不同的。我正在尝试让程序打印出从最低值到最高值的序列。为什么我的其他人不在这里工作?或者我在代码中犯了一些明显的错误?

代码不完整,我只写了这么远,然后测试了它。当我输入8然后输入2然后输入4时,我打算打印出2,3,4,5,6,7,8,但事实并非如此。相反,它打印出4,5,6,7,8,

    System.out.print("Enter a number: ");
    int n1 = Integer.parseInt(in.readLine());
    System.out.print("Enter a number: ");
    int n2 = Integer.parseInt(in.readLine());
    System.out.print("Enter a number: ");
    int n3 = Integer.parseInt(in.readLine());

    if ((n1 > n2) | (n2 > n3)) {
        for (int i = n3; (i <= n1); i++) {
            System.out.print(i + ",");
        }
    }
    else if ((n1 > n3) | (n3 > n2)) {
        for (int i = n2; (i <= n1); i++) {
            System.out.print(i + ",");
        }
    }
    }
}

3 个答案:

答案 0 :(得分:3)

你的逻辑是错误的。当n1 = 8n2 = 2n3 = 4n1 > n2成立时,您的代码最终会占用第一条路径(从n3循环到{{1} })。 n1的价值甚至没有考虑在内。

请记住,如果你采用当前的方法,你将需要大约六个“else if”子句来处理起始和结束变量的所有可能组合。您可能会更好地确定最小值和最大值是什么,将它们分配给两个变量,并循环这两个值之间的值。它会为你节省很多打字。

答案 1 :(得分:3)

据推测,在你的第一个条件中,你想说“n1大于n2,n2大于n3”。但是,“and”运算符写为&&,而不是|(它是位级“或”运算符)。因此,您的第一个条件(n1 > n2)足以满足第一个if,因此else不适用。

答案 2 :(得分:2)

java逻辑OR运算符是||,而不是|代表BITWISE OR