错误:-扫描程序类要求输入无限次

时间:2018-10-26 12:39:11

标签: java input java.util.scanner infinite

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

2 个答案:

答案 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