Java if/else语句未被程序正确读取

Java if/else语句未被程序正确读取,java,if-statement,Java,If Statement,这是一个程序,列出了有关从扫描仪对象输入的整数的几个事实。但是,我在结尾的if/else语句中遇到了一些问题 问题是,如果输入是除0以外的正整数,程序总是读取以下语句:System.out.println(“j)它小于它的反向值:“+reverse”)。如果它是负整数,它总是打印System.out.println(“j”)它大于它的反向值:“+reverse”) 我认为这是因为reverse中存储的数据是0,因为int reverse=0在while循环之前声明。但是,程序正确地打印输入的相反

这是一个程序,列出了有关从扫描仪对象输入的整数的几个事实。但是,我在结尾的if/else语句中遇到了一些问题

问题是,如果输入是除0以外的正整数,程序总是读取以下语句:
System.out.println(“j)它小于它的反向值:“+reverse”)。如果它是负整数,它总是打印
System.out.println(“j”)它大于它的反向值:“+reverse”)

我认为这是因为
reverse
中存储的数据是0,因为
int reverse=0
while
循环之前声明。但是,程序正确地打印输入的相反方向

import java.util.Scanner;

public class Integer {

    public static void main(String[] args) {
        System.out.println("This program will:");
        System.out.println("1) Prompt you for an integer then \n2) List several facts about that integer");
        Scanner keyboard = new Scanner (System.in); // define a Scanner object attached to a keyboard
        System.out.print("\nEnter an integer: "); // prompt the user to enter an integer

        while ( ! keyboard.hasNextInt()) { // is the first input value an int?
            String badInput; // assign non-integer inputs to badInput
            badInput = keyboard.next();
            System.out.println("Error: expected an integer, encountered: " + badInput);
            System.out.print("Please enter an integer: ");
        }

        int integer = keyboard.nextInt(); // assign the input to the integer variable
        System.out.println("A list of several facts about the number: " + integer); // safe to read first input value

        System.out.println("================================================================");

        // print the input with space betweeen each digits
        System.out.print("a) The digit(s) in it is/are: ");
        String number = String.valueOf(integer);
        for ( int count = 0; count < number.length(); count++) {
            char counted = number.charAt(count); // read each digit in the input
            System.out.print(counted + " ");
        }

        System.out.println(); // skip a line

        // determine whether the input is negative or positive
        if ( integer >= 0 ) {
            System.out.println("b) It is positive");
        }
        else {
            System.out.println("b) It is negative");
        }

        // determine whether the input is even or odd
        if (integer % 2 == 0) {
            System.out.println("c) It is even");
        }
        else {
            System.out.println("c) It is odd");
        }
        int countOdd = 0;
        int countEven = 0;       
        int countDigit = 0; 
        int countZero = 0;
        int reverse = 0;
        int sum = 0;
        int product = 1;
        int readRightMost;

        while(integer != 0) {
            readRightMost = integer % 10; // read rightmost digit in the input   
            reverse = reverse * 10 + readRightMost;
            integer /= 10; // drop the rightmost digit in the input
            ++countDigit;
            sum += readRightMost;
            product *= readRightMost;                                               

            if (readRightMost % 2 == 0){ // count how many even digits are in the input
                ++countEven;
            }
            else { // count how many odd digits are in the input
                ++countOdd;
            }
            if (readRightMost == 0) { // count how many zero digits are in the input
                ++countZero;
            }              
        }
        System.out.println("d) It has " + countDigit + " digit(s)");       
        System.out.println("e) It has " + countOdd + " odd digit(s)");
        System.out.println("f) It has " + countEven + " even digit(s)");
        System.out.println("g) It has " + countZero + " zero digit(s)");
        System.out.println("h) The sum of the digits in it is " + sum);
        System.out.println("i) The product of the digits in it is " + product);

        if (integer < reverse) { // if the reverse value of an int is greater than its original value
            System.out.println("j) It is smaller than its reverse value: " + reverse);
        }
        else { // if the reverse value of an int is lesser than its original value
            System.out.println("j) It is bigger than its reverse value: " + reverse);             
        }  

        System.out.println("================================================================");
    }

}
import java.util.Scanner;
公共类整数{
公共静态void main(字符串[]args){
System.out.println(“此程序将:”);
System.out.println(“1)提示您输入一个整数,然后\n2)列出有关该整数的几个事实”);
扫描仪键盘=新扫描仪(System.in);//定义连接到键盘的扫描仪对象
System.out.print(“\n输入整数:”);//提示用户输入整数
而(!keyboard.hasNextInt()){//第一个输入值是int吗?
String badInput;//将非整数输入分配给badInput
badInput=键盘。下一步();
System.out.println(“错误:应为整数,遇到:“+badInput”);
System.out.print(“请输入一个整数:”);
}
int integer=keyboard.nextInt();//将输入分配给整数变量
System.out.println(“关于数字的若干事实的列表:“+integer”);//读取第一个输入值是安全的
System.out.println(“====================================================================================================”);
//打印输入,每个数字之间留有空格
系统输出打印(“a)其中的数字为:”;
字符串编号=String.valueOf(整数);
对于(int count=0;count=0){
System.out.println(“b)为正”);
}
否则{
System.out.println(“b)为负数”);
}
//确定输入是偶数还是奇数
如果(整数%2==0){
System.out.println(“c)它是偶数”);
}
否则{
System.out.println(“c)它是奇数”);
}
int countOdd=0;
int count偶数=0;
int countDigit=0;
int countZero=0;
int反向=0;
整数和=0;
int乘积=1;
int最右边;
while(整数!=0){
readRightMost=整数%10;//读取输入中最右边的数字
反向=反向*10+最右侧读取;
整数/=10;//删除输入中最右边的数字
++计数位数;
总和+=最右边的读数;
产品*=最右边的;
如果(最右边的%2==0){//计算输入中的偶数位数
++偶数;
}
else{//计算输入中有多少奇数
++countOdd;
}
如果(readRightMost==0){//计算输入中有多少个零位
++零计数;
}              
}
System.out.println(“d)它有“+countDigit+”个数字);
System.out.println(“e)它有“+countOdd+”个奇数);
System.out.println(“f)它有“+偶数+”偶数位数);
System.out.println(“g)它有“+countZero+”零位数);
System.out.println(“h)其中的数字之和为“+sum”);
System.out.println(“i)其中数字的乘积为“+乘积);
if(integer
循环结束时,while(integer!=0)
你知道
integer
必须是0,并且在
if(integer
之前你不会再更改它,因此它也可能是
if(0
,这正是你所看到的行为。要解决这个问题,请让您的循环在不同于您稍后测试的变量上运行。

Oh wow。一直以来,我都认为反过来是0。我完全忘记了整数的值。非常感谢你。