正在寻找一个Java程序中优化while循环的帮助,该程序设计用于计算从用户输入读取的奇数

正在寻找一个Java程序中优化while循环的帮助,该程序设计用于计算从用户输入读取的奇数,java,Java,大家早上好- 我正试图完善一个有问题的代码块。程序读取一个整数并输出该整数中的奇数。我使用“while”循环向用户提供重复此活动或通过输入负整数结束程序的选项。虽然我看到了不必要的重复,但当用户多次尝试时,最终会出现不准确的数据,循环还是有些成功。如果您对改进我的方法有任何见解或建议,我们将不胜感激。提前感谢您的帮助 import java.lang.Math; import java.util.Scanner; import java.lang.String; class Digits{//

大家早上好-

我正试图完善一个有问题的代码块。程序读取一个整数并输出该整数中的奇数。我使用“while”循环向用户提供重复此活动或通过输入负整数结束程序的选项。虽然我看到了不必要的重复,但当用户多次尝试时,最终会出现不准确的数据,循环还是有些成功。如果您对改进我的方法有任何见解或建议,我们将不胜感激。提前感谢您的帮助

import java.lang.Math;
import java.util.Scanner;
import java.lang.String;

class Digits{//start class

   public static void main(String[]args){//start main

      Scanner userin  = new Scanner(System.in);

      System.out.println("Hello and welcome to my Digit Reader program!");
      System.out.println("In this program I will ask you for an integer, then I will tell you how many odd numbers were in the value you gave.");
      System.out.println("To refresh your memory, an integer is a whole number that is neither a fraction nor a decimal.");
      System.out.println("You will be able to do this over and over until you enter a negative integer.");
      System.out.print("Let's get started! Input an integer with a few digits (I.E. 23594) here: ");

      int oddcount = 0;
      int number = userin.nextInt();

      System.out.println("You entered " + number + " as your number to be read.");

      while (number > 0){//check to see if number is odd

         int remainder = number % 10;

         if (remainder % 2 !=0)

            oddcount++;

         number = number/10;
      }

      System.out.println("Your integer had " + oddcount + " odd numbers in it.");              
      System.out.println("Enter another positive integer, or enter a negative integer to quit: ");

      number = userin.nextInt();
      oddcount = 0;      

      System.out.println("You entered " + number + " as your number to be read.");

      while(number > 0){//making sure a user must enter a negative value to end the program

         int remainder = number % 10;

         if (remainder % 2 !=0)

            oddcount++;

         number = number/10;

         System.out.println("Your integer had " + oddcount + " odd integers in it."); 
      }

      System.out.println("Thank you for using my digit reader program!");
   }//end main
}//end class

实际上你需要一个出口。假设退出点是负数。然后可以使用以下结构:

        while((num = scanner.nextInt()) > 0) {
           //Inner logic
        }

        {
            System.out.println("negative number!!");
            System.exit(1);
        }

从概念上讲,您正在使用两个循环来做相同的事情。有一个小的例外是,在第二个循环中,您在while循环中输出奇数(这就是为什么它对第一个数字有效,而对第二个数字则会重复)

除此之外,输出的文本的行为完全相同。因此,让我们用一个好的方法来表示这一点,以便更容易阅读:

砰的一声,就像这样,我们得到了一个更容易管理的:

import java.util.Scanner;

class Digits {// start class

    public static void main(String[] args) {// start main

        Scanner userin = new Scanner(System.in);

        System.out.println("Hello and welcome to my Digit Reader program!");
        System.out.println("In this program I will ask you for an integer, then I will tell you how many odd numbers were in the value you gave.");
        System.out.println("To refresh your memory, an integer is a whole number that is neither a fraction nor a decimal.");
        System.out.println("You will be able to do this over and over until you enter a negative integer.");
        System.out.print("Let's get started! Input an integer with a few digits (I.E. 23594) here: ");

        int number = userin.nextInt();
        int oddcount = getOddNumberCount(number);

        System.out.println("Your integer had " + oddcount + " odd numbers in it.");
        System.out.println("Enter another positive integer, or enter a negative integer to quit: ");

        number = userin.nextInt();
        oddcount = getOddNumberCount(userin);

        System.out.println("Your integer had " + oddcount + " odd numbers in it.");
        System.out.println("Thank you for using my digit reader program!");
    }// end main

    private static int getOddNumberCount(int number) {
        int oddcount = 0;

        System.out.println("You entered " + number + " as your number to be read.");

        while (number > 0) {// check to see if number is odd
            int remainder = number % 10;
            if (remainder % 2 != 0)
                oddcount++;

            number = number / 10;
        }
        return oddcount;
    }
}// end class
现在我们有了一个方法getOddNumberCount,它读取并计算奇数的数量。但这并不能解决问题!不会再重复了

这样写的原因更为明显。你只循环了两次

因此,我会对代码进行额外的更正,以便用户可以根据自己的意愿循环任意多次,直到输入负数:

import java.util.Scanner;

class Digits {// start class

    public static void main(String[] args) {// start main

        Scanner userin = new Scanner(System.in);

        System.out.println("Hello and welcome to my Digit Reader program!");
        System.out.println("In this program I will ask you for an integer, then I will tell you how many odd numbers were in the value you gave.");
        System.out.println("To refresh your memory, an integer is a whole number that is neither a fraction nor a decimal.");
        System.out.println("You will be able to do this over and over until you enter a negative integer.");
        System.out.print("Let's get started! Input an integer with a few digits (I.E. 23594) here: ");

        int number = userin.nextInt();
        while(number >= 0) {
            int oddcount = getOddNumberCount(number);

            System.out.println("Your integer had " + oddcount + " odd numbers in it.");
            System.out.println("Enter another positive integer, or enter a negative integer to quit: ");

            number = userin.nextInt();
        }

        System.out.println("Thank you for using my digit reader program!");
    }// end main

    private static int getOddNumberCount(int number) {
        int oddcount = 0;

        System.out.println("You entered " + number + " as your number to be read.");

        while (number > 0) {// check to see if number is odd
            int remainder = number % 10;
            if (remainder % 2 != 0)
                oddcount++;

            number = number / 10;
        }
        return oddcount;
    }
}// end class

祝你好运

如果您有代码重复,请学习如何编写方法来消除这种情况。最后一条log语句位于while循环内部,而不是外部。