初学者 Java 程序(计算亏、富、素和完全数)
Beginner Java program (calculating deficient, abundant, prime, and perfect numbers)
do
{
System.out.println("Enter either limit, abundant, deficient, perfect, or prime = value:");
condition = scan.next();
String equals = scan.next();
num = scan.next();
value=Integer.parseInt(num);
if (Type.isInteger(condition) || !Type.isInteger(num) || value<0)
System.out.println("Please enter in condition = value format");
else
break;
}while(stop);
System.out.println("N" + "\t" + "Abundant" + " " + "Deficient" + " " + "Perfect" + " " + "Prime");
sigma = 0; //sets sigma=0
n=1;
while (stop)
{
for (f = 1; f <= n/2; f++)
{
if (n % f == 0)
sigma = sigma + f;
}
System.out.print(n + "\t");
if (sigma>n)
acount++;
if (sigma == 1)
p++; //prime counter
if (sigma<n)
dcount++; //deficient counter
if (sigma == n)
pcount++; //perfect counter
System.out.print(acount + " " + "\t" + " " + dcount + "\t" + " " + pcount + "\t" + " " + p); //prints abundant column
System.out.println();
if (condition.equals("limit"))
{
if(n<value)
n++;
else
break;
}
if(condition.equals("abundant"))
{
if(acount<value)
n++;
else
break;
}
if (condition.equals("deficient"))
{
if (dcount<value)
n++;
else
break;
}
if (condition.equals("perfect"))
{
if (pcount<=value)
n++;
else
break;
}
if (condition.equals("prime"))
{
if (p<value)
n++;
else
break;
}
}
}
}
基本上,代码应该打印出 5 列:n、丰富、不足、完美和质数。每行下面都有一列数字。用户应该以 'condition = value' 格式输入规范。所以如果他们输入 limit = 10 那么它将打印 10 行。如果他们输入 abundant = 10 那么它将继续打印行,直到 abundant 的值达到 10。我遇到的问题是当我输入某些值时我的程序将无限循环,我不确定原因是什么。例如,如果我输入 deficient = 2 它将正常工作,但如果我输入 deficient = 10 然后它将开始无限循环。但是,当我输入 perfect = 10 时,它只会打印出 1 行。就像我的标题所说的那样,我是一个初学者,我无法弄清楚是什么导致了错误。有什么建议吗?
尝试在循环内初始化 sigma 的值:
while (stop)
{
sigma = 0;
...
}
由于 sigma 永远不会重置为零,它只会随着每个数字不断增长。所以你会很快停止寻找不足的数字或完美的数字,一切都会变得丰富。这就是 abundant 关键字有效而 deficient 无效的原因。
do
{
System.out.println("Enter either limit, abundant, deficient, perfect, or prime = value:");
condition = scan.next();
String equals = scan.next();
num = scan.next();
value=Integer.parseInt(num);
if (Type.isInteger(condition) || !Type.isInteger(num) || value<0)
System.out.println("Please enter in condition = value format");
else
break;
}while(stop);
System.out.println("N" + "\t" + "Abundant" + " " + "Deficient" + " " + "Perfect" + " " + "Prime");
sigma = 0; //sets sigma=0
n=1;
while (stop)
{
for (f = 1; f <= n/2; f++)
{
if (n % f == 0)
sigma = sigma + f;
}
System.out.print(n + "\t");
if (sigma>n)
acount++;
if (sigma == 1)
p++; //prime counter
if (sigma<n)
dcount++; //deficient counter
if (sigma == n)
pcount++; //perfect counter
System.out.print(acount + " " + "\t" + " " + dcount + "\t" + " " + pcount + "\t" + " " + p); //prints abundant column
System.out.println();
if (condition.equals("limit"))
{
if(n<value)
n++;
else
break;
}
if(condition.equals("abundant"))
{
if(acount<value)
n++;
else
break;
}
if (condition.equals("deficient"))
{
if (dcount<value)
n++;
else
break;
}
if (condition.equals("perfect"))
{
if (pcount<=value)
n++;
else
break;
}
if (condition.equals("prime"))
{
if (p<value)
n++;
else
break;
}
}
}
}
基本上,代码应该打印出 5 列:n、丰富、不足、完美和质数。每行下面都有一列数字。用户应该以 'condition = value' 格式输入规范。所以如果他们输入 limit = 10 那么它将打印 10 行。如果他们输入 abundant = 10 那么它将继续打印行,直到 abundant 的值达到 10。我遇到的问题是当我输入某些值时我的程序将无限循环,我不确定原因是什么。例如,如果我输入 deficient = 2 它将正常工作,但如果我输入 deficient = 10 然后它将开始无限循环。但是,当我输入 perfect = 10 时,它只会打印出 1 行。就像我的标题所说的那样,我是一个初学者,我无法弄清楚是什么导致了错误。有什么建议吗?
尝试在循环内初始化 sigma 的值:
while (stop)
{
sigma = 0;
...
}
由于 sigma 永远不会重置为零,它只会随着每个数字不断增长。所以你会很快停止寻找不足的数字或完美的数字,一切都会变得丰富。这就是 abundant 关键字有效而 deficient 无效的原因。