错误:- 扫描仪 class 无限次要求输入
Bug :- Scanner class asks for input infinite times
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");
}
}
所以我只要求输入两次,但没有停止。
这是错误还是我犯的错误?
这是我的完整程序。
This is the screenshot of the terminal window
您必须使用 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
就是这个循环:
while(k==false)
{
temp=sum;
while(temp>0)
{
sum=sum+(temp%10);
temp=temp/10;
}
if(sum/10==0)
k=true;
}
似乎永远不会结束。
我不知道你想用它做什么,但 k
不会变成 true
否则会花费很多时间。
在此期间,您认为系统会提示您提供新号码,但 您没有。
您只需输入并按回车键即可。
要证明这一点,只需键入 ppp
。这应该抛出 InputMismatchException
但它没有。
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");
}
}
所以我只要求输入两次,但没有停止。
这是错误还是我犯的错误?
这是我的完整程序。
This is the screenshot of the terminal window
您必须使用 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
就是这个循环:
while(k==false)
{
temp=sum;
while(temp>0)
{
sum=sum+(temp%10);
temp=temp/10;
}
if(sum/10==0)
k=true;
}
似乎永远不会结束。
我不知道你想用它做什么,但 k
不会变成 true
否则会花费很多时间。
在此期间,您认为系统会提示您提供新号码,但 您没有。
您只需输入并按回车键即可。
要证明这一点,只需键入 ppp
。这应该抛出 InputMismatchException
但它没有。