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

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");

    }

}

所以我只要求输入两次,但它并没有停止。


这是我犯的错误还是错误?


这是我的完整程序。http://img4.mukewang.com/61b2badf0001a85e19151075.jpg


汪汪一只猫
浏览 180回答 2
2回答

一只斗牛犬

只是这个循环:&nbsp; &nbsp; &nbsp; &nbsp; while(k==false)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp=sum;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while(temp>0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sum=sum+(temp%10);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; temp=temp/10;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(sum/10==0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k=true;&nbsp; &nbsp; &nbsp; &nbsp; }似乎永远不会结束。我不知道你想用它做什么,但k不会变成true,否则会花费很多时间。在此期间,您认为系统会提示您提供新号码,但您没有。您只需输入并按回车键即可。要证明这一点,只需键入ppp. 这应该抛出InputMismatchException但它没有。

尚方宝剑之说

您必须使用关闭扫描仪,sc.close(); 但您的循环仍然存在问题,我已经使用我自己的代码重新植入了代码,现在应该可以使用了。public static void main(String[] args) {&nbsp; &nbsp; Scanner sc = new Scanner(System.in);&nbsp; &nbsp; System.out.println("Enter 2 numbers as upper and lower bound and all composite numbers between them will be displayed");&nbsp; &nbsp; int m = sc.nextInt();&nbsp; &nbsp; int n = sc.nextInt();&nbsp; &nbsp; sc.close();&nbsp; &nbsp; if (m < n) {&nbsp; &nbsp; &nbsp; &nbsp; for (int i = m; i <= n; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int f = 0;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int i2 = 1; i2 <= n; i2++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (n % i2 == 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (f > 2) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int num = i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num = sumOfDigits(num);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } while (num > 9);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (num == 1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(i);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Invalid Input");&nbsp; &nbsp; }}public static int sumOfDigits(int n) {&nbsp; &nbsp; int s = 0;&nbsp; &nbsp; while (n > 0) {&nbsp; &nbsp; &nbsp; &nbsp; s += n % 10;&nbsp; &nbsp; &nbsp; &nbsp; n /= 10;&nbsp; &nbsp; }&nbsp; &nbsp; return s;}这使得输出10192837465564738291100
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java