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