import java.util.*;
public class Composite_Magic
{
public static void main()
{
int i,j,m,n,fact=0,sum=0,temp=0;
boolean k=false;
Scanner sc=new Scanner(System.in);
System.out.println("Enter 2 numbers as upper and lower bound and all composite numbers between them will be displayed");
m=sc.nextInt();
n=sc.nextInt();
sc.close();
if(m<n){
for(i=m;i<=n;i++)
{
for(j=1;j<=i;j++)
{
if(i%j==0)
fact++;
}
sum=i;
while(k==false)
{
temp=sum;
while(temp>0)
{
sum=sum+(temp%10);
temp=temp/10;
}
if(sum/10==0)
k=true;
}
if(sum==1 && fact>2)
System.out.println(i);
}
}
else
System.out.println("Invalid Input");
}
}
所以我只要求输入两次,但它不会停止。
这是我的错误还是某些错误?
这是我完整的程序。
答案 0 :(得分:1)
只是这个循环:
while(k==false)
{
temp=sum;
while(temp>0)
{
sum=sum+(temp%10);
temp=temp/10;
}
if(sum/10==0)
k=true;
}
似乎永无止境。
我不知道您要如何处理它,但是k
不会变成true
否则会花费很多时间。
在此期间,您认为会提示您输入新数字,但您没有输入。
您只需输入并按Enter。
为了证明这一点,只需键入ppp
。这应该抛出InputMismatchException
,但不会。
答案 1 :(得分:0)
您必须使用sc.close();
关闭扫描仪
但是您的循环仍然存在问题,我已经使用自己的代码重新植入了代码,现在应该可以了。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter 2 numbers as upper and lower bound and all composite numbers between them will be displayed");
int m = sc.nextInt();
int n = sc.nextInt();
sc.close();
if (m < n) {
for (int i = m; i <= n; i++) {
int f = 0;
for (int i2 = 1; i2 <= n; i2++) {
if (n % i2 == 0)
f++;
}
if (f > 2) {
int num = i;
do {
num = sumOfDigits(num);
} while (num > 9);
if (num == 1) {
System.out.println(i);
}
}
}
} else {
System.out.println("Invalid Input");
}
}
public static int sumOfDigits(int n) {
int s = 0;
while (n > 0) {
s += n % 10;
n /= 10;
}
return s;
}
输出
10
19
28
37
46
55
64
73
82
91
100