Ошибка: - класс сканера запрашивает ввод бесконечное количество раз - PullRequest
0 голосов
/ 26 октября 2018
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");
    }
}

Итак, я запросил ввод только дважды, но он не останавливается.

Это ошибка или какая-то ошибка, которую я делаю?

Это мой полныйпрограмма.

Это скриншот окна терминала

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Просто этот цикл:

        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, но это не так.

0 голосов
/ 26 октября 2018

Вы должны закрыть сканер, используя 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
...