此程序中的错误是main方法中的while语句。它之前正在工作,当我无效输入值时它将停止并退出程序,当我输入正确的值时,它将循环遍历while语句一次但是在更多的工作之后突然我的代码它为1025以下的任何输入循环无穷大。忽略程序输出的邋iness,因为我还在编辑它,主要的问题是为什么它不会在while语句中停止循环。
import java.util.Scanner;
public class DNS
{
public static void main(String[] args)
{
int y;
Scanner input = new Scanner( System.in);
System.out.println("java DisplayNumberSystems");
System.out.println("Enter a decimal value to display to: ");
y = input.nextInt();
while(y !=1025)
{
for(int x=0; x <=y; x++)
{
System.out.println("Decimal");
System.out.println(x);
}
for(int i=0; i <=y; i++)
{
System.out.println("");
System.out.println("Binary");
convertToBinary(i);
}
System.out.println("");
for(int z=0; z <=y; z++)
{
System.out.println("Hex");
convertToHex(z);
}
System.out.println("");
for(int d=0; d <=y; d++)
{
System.out.println("Octal");
convertToOctal(d);
System.out.println("");
}
}
}
public static void convertToBinary(int x)
{
if(x >0)
{
convertToBinary(x/2);
System.out.printf(x%2 + "");
}
}
public static void convertToOctal(int x)
{
int rem;
while(x >0)
{
rem = x%8;
System.out.printf("%d", rem);
x=x/8;
}
}
public static void convertToHex(int x)
{
int rem;
while(x >0)
{
rem = x%16;
switch(rem)
{
case 1:
System.out.printf("1");
break;
case 2:
System.out.printf("2");
break;
case 3:
System.out.printf("3");
break;
case 4:
System.out.printf("4");
break;
case 5:
System.out.printf("5");
break;
case 6:
System.out.printf("6");
break;
case 7:
System.out.printf("7");
break;
case 8:
System.out.printf("8");
break;
case 9:
System.out.printf("9");
break;
case 10:
System.out.printf("A");
break;
case 11:
System.out.printf("B");
break;
case 12:
System.out.printf("C");
break;
case 13:
System.out.printf("D");
break;
case 14:
System.out.printf("E");
break;
case 15:
System.out.printf("F");
break;
}
x=x/16;
}
System.out.println("");
}
}
答案 0 :(得分:1)
如果您只打算执行一次,为什么需要while
循环?请考虑使用if
。
没关系,如何打破while
循环?
您可以在适用的地方使用break;
来停止执行循环。
例如:
while (y != 1025) {
for (int x = 0; x <= y; x++) {
System.out.println("Decimal");
System.out.println(x);
}
for (int i = 0; i <= y; i++) {
System.out.println("");
System.out.println("Binary");
convertToBinary(i);
}
System.out.println("");
for (int z = 0; z <= y; z++) {
System.out.println("Hex");
convertToHex(z);
}
System.out.println("");
for (int d = 0; d <= y; d++) {
System.out.println("Octal");
convertToOctal(d);
System.out.println("");
}
break;
}
答案 1 :(得分:0)
你没有在任何地方增加y的值。
因此,对于y值低于1025的值,比如100.y总是100,并且每次检查条件时y!= 1025都是真的。所以,请加上y = y + 1
或其他任何东西,它会做。
答案 2 :(得分:0)
while(y !=1025)
在此行中,您的循环有效,而y为lower than 1025
和higher than 1025
。
此外,您没有更改y value
。
答案 3 :(得分:0)
它将永远循环,正如上面的人所说的那样。除非y改变,否则总是不等于1025,除非它的原始值是1025。
你到底想要达到什么目的?你应该包括y = input.nextInt();在循环内部,如果条件变为真,循环将会中断?
答案 4 :(得分:0)
如果在while循环的末尾添加一个break,它会有效地使while循环变为冗余。它将循环一次然后退出。如果您只想为1025以外的值运行循环,则应使用if then语句...
答案 5 :(得分:0)
您的while
循环运行无限次的原因是您没有更新(可能会增加)y
的值。您可能希望在循环中添加类似以下语句的内容:
y++;
这会在每次循环迭代时将y
的值增加1