为了账号安全,请及时绑定邮箱和手机立即绑定

错误:- Scanner 类要求无限次输入

错误:- Scanner 类要求无限次输入

汪汪一只猫 2021-12-10 10:26:13
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 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

只是这个循环:


        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但它没有。


查看完整回答
反对 回复 2021-12-10
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您必须使用关闭扫描仪,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


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信