0
public class ConsecutiveChecker
{
     public static void main( String[] args )
    { 
    java.util.Scanner keyboardReader = new java.util.Scanner(System.in);
    int number = keyboardReader.nextInt();

    int w;
    int x;
    int y;
    int z;
    // w= fourth digit, x= third digit, y= second digit, z= first digit
    w = (number - (number % 1000)) / 1000;
    x = ((number - (number % 100)) % 1000) / 10;
    y = ((number - (number % 10)) % 100) * 10;
    z = (1000)*(number % 10);

    boolean isOneDigitConsecutive;
    isOneDigitConsecutive = (number <= 9);

    boolean isTwoDigitConsecutive;
    isTwoDigitConsecutive = (w = 0) && (x = 0) && (y <= 9) && (y - z ==1);

    boolean isConsecutive = (isOneDigitConsecutive || isTwoDigitConsecutive || isThreeDigitConsecutive || isFourDigitConsecutive)
    System.out.println(); 
}

}

嗨,我是 Java 新手,我必须编写一个代码来检测 4 位数字(用户输入的)是否使用布尔变量连续。连续如 0543, 1234, 0009, 0034(一位数视为连续)。到目前为止,我已经编写了这部分代码,问题是我不明白为什么我的 line
boolean isTwoDigitConsecutive; isTwoDigitConsecutive = (w = 0) && (x = 0) && (y <= 9) && (y - z ==1); 错误的。它说我不能将 && 与 Int 一起使用。

我想对如何使用布尔变量进行一些说明。

先感谢您。

*编辑:感谢您的帮助,我听取了您的建议并相应地更改了我的代码。

4

4 回答 4

2

尝试isTwoDigitConsecutive = (w == 0) && (x == 0) && (y <== 9) && (y - z ==1); 使用==符号时,编译器会检查是否相等。如果您使用的是单个=,它会将=标志的右侧部分分配给左侧部分。

于 2013-09-28T19:30:33.800 回答
0

你有两个问题:

1-正如阿米尔所说:

isTwoDigitConsecutive = (w == 0) && (x == 0) && (y <== 9) && (y - z ==1);

2- 对 w、x、y、z 的小修正

w = (number - (number % 1000)) / 1000;
x = ((number - (number % 100)) % 1000) / 100;
y = ((number - (number % 10)) % 100) / 10;
z = (number % 10);

也不要忘记初始化变量 isThreeDigitConsecutive 和 isFourDigitConsecutive

于 2013-09-28T19:51:54.123 回答
0

我理解你的担心。与 C 语言不同,java 只接受带有这些运算符的布尔值。

在 C 中非零为真,零为假

(w=0) 将返回整数 0。while (w==0) 将返回布尔值的真/假。

尽管您可能通过写 w=0 而不是 w==0 犯了逻辑错误,但 C 编译器在获取值时不会生成编译错误。而java需要布尔值。因此它会显示一个错误。

于 2013-09-28T21:44:50.677 回答
0

除了这里所说的一切,你的代码可以更干净、更高效。

  • 在单独的方法中执行“连续性”测试。它更好,可以在以后的代码中重用。
  • 尽可能使用循环、数组和其他工具来避免重复类似的代码。在这种情况下,您基本上想要测试每两个后代数字,因此请在循环中进行。
  • 检查输出、捕获(和提示)异常以及注释代码总是好的。

    public class ConsecutiveChecker {
        /**
         * return true if number digits are consecutively increasing.
         *
         * @param num
         * @return
         */
        private static boolean isConsecutive(int num) {
            if(num < 0 || num > 9999) throw new RuntimeException("Input out of range (0-9999)");
            // We check if the digits are downward consecutive from right to left
            // (which is same as upward consecutive from left to right, but easier
            // and more efficient to compute).
            while (num > 0) {
                int leftDigit = num%10;
                int secondFromLeftDigit = (num/10)%10;
                if (leftDigit < secondFromLeftDigit) return false;
                num = num/10;
            }
            // if number is now 0, it's consecutive:
            return true;
        }
    
        public static void main(String[] args) {
            try {
                java.util.Scanner keyboardReader = new java.util.Scanner(System.in);
                int number = keyboardReader.nextInt();
    
                System.out.println(
                                "Input number is " + 
                                (isConsecutive(number) ? "" : "not ") + 
                                "consecutive"
                        );
            } catch (Exception e) {
                System.out.println("Somthing is wrong with the input: ");
                e.printStackTrace();
            }
        }
    }
    
  • 于 2013-09-28T22:44:43.243 回答