扫描仪NoSuchElementException [英] Scanner NoSuchElementException

查看:139
本文介绍了扫描仪NoSuchElementException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Java作业有问题。我得到一个意想不到的例外,具体来说:


java.util.NoSuchElementException:找不到行


我正在使用 Scanner(System.in),程序不断读取任何内容,重复无效格式例外文字。如果我输入正确的价值 int ,第一部分通过,然后 double 部分立即进入此异常。如果我输入一个不正确的价值 int ,那么它开始循环异常。



这是我的代码:

  import java.util.Scanner ; 

public class Program_4 {

public static void main(String [] args){
getValidInt(输入从5到50的整数,5,50 );
getValidDouble(从5.0到50.0输入一个double,5.0,50.0);
getValidString(输入长度为5到8个字符的字符串,5,8);
}


public static int getInt(String prompt)
{
扫描仪sc = new Scanner(System.in);
int i = 0;
boolean isValid;
do
{
try
{
System.out.print(prompt +:);
i = Integer.parseInt(sc.nextLine());
isValid = true;
}
catch(异常e)
{
System.out.println(e);
System.out.print(Invalid Format:);
isValid = false;
}
}
while(isValid == false);
sc.close();
return i;
}

public static int getValidInt(String prompt,int min,int max)
{
int i = 0;
boolean isValid = false;
do
{
i = getInt(prompt);
if(i< min)System.out.println(Value must be> =+ min);
else if(i> max)System.out.println(Value must be <=+ max);
else isValid = true;
} while(isValid == false);

return i;
}

public static double getDouble(String prompt)
{
扫描仪sc = new Scanner(System.in);
double i = 0.0;
boolean isValid;
do
{
try
{
System.out.print(prompt +:);
i = Double.parseDouble(sc.nextLine());
isValid = true;
}
catch(异常e)
{
System.out.println(e);
System.out.println(Invalid Format:);
isValid = false;
}
} while(isValid == false);
sc.close();
return i;
}

public static double getValidDouble(String prompt,double min,double max)
{
int i = 0;
boolean isValid = false;
do
{
i = getInt(prompt);
if(i< min)System.out.println(Value must be> =+ min);
else if(i> max)System.out.println(Value must be <=+ max);
else isValid = true;
} while(isValid == false);

return i;
}

public static String getString(String prompt)
{
扫描仪sc = new Scanner(System.in);
String i =;
boolean isValid;
do
{
try
{
System.out.print(prompt +:);
i = sc.nextLine();
isValid = true;
}
catch(异常e)
{
System.out.print(Invalid Format:);
isValid = false;
}
} while(isValid == false);
sc.close();
return i;
}

public static String getValidString(String prompt,int min,int max)
{
String i;
boolean isValid = false;

do
{
i = getString(prompt);
if(i.length()< min)System.out.println(String必须大于+ min +个字符。
else if(i.length()> max)System.out.println(String必须大于+ max +个字符。
else isValid = true;
} while(isValid == false);

return i;
}
}


解决方案

你有多个 Scanner ,您关闭,它关闭底层的 InputStream ,因此另一个扫描器不能再从相同的 InputStream NoSuchElementException 结果中读取。



对于控制台应用程序,使用单个 Scanner System.in


I'm having a problem with my Java assignment. I'm getting an unexpected exception, specifically:

java.util.NoSuchElementException: No line found

I am using Scanner(System.in) and the program is continually reading nothing and repeating the "invalid format" exception text. If I enter a correctly valued int, the first part passes and then the double part immediately goes into this exception. If I enter an incorrectly valued int, then it starts looping the exception.

Here is my code:

import java.util.Scanner;

public class Program_4 {

    public static void main(String[] args) {
        getValidInt("Enter an integer from 5 to 50",5,50);
        getValidDouble("Enter a double from 5.0 to 50.0",5.0,50.0);
        getValidString("Enter a string with length from 5 to 8 characters",5,8);
    }


    public static int getInt(String prompt)
    {
       Scanner sc = new Scanner(System.in);
       int i = 0;
       boolean isValid;
       do
       {
          try
          {
             System.out.print(prompt + ": ");
             i = Integer.parseInt(sc.nextLine());
             isValid = true;
          } 
          catch (Exception e)
          {
              System.out.println(e);
              System.out.print("Invalid Format: ");
              isValid = false;
          }
       }
       while (isValid == false);
       sc.close();
       return i;
    }

    public static int getValidInt(String prompt, int min, int max)
    {
        int i = 0;
        boolean isValid = false;
        do
        {
            i = getInt(prompt);
            if(i < min) System.out.println("Value must be >= " + min);
            else if(i > max) System.out.println("Value must be <= " + max);
            else isValid = true;
        } while (isValid == false);

        return i;
    }

    public static double getDouble(String prompt)
    {
       Scanner sc = new Scanner(System.in);
       double i = 0.0;
       boolean isValid;
       do
       {
          try
          {
             System.out.print(prompt + ": ");
             i = Double.parseDouble(sc.nextLine());
             isValid = true;
          } 
          catch (Exception e)
          {
              System.out.println(e);
              System.out.println("Invalid Format: ");
              isValid = false;
          }
       } while (isValid == false);
       sc.close();
       return i;
    }

    public static double getValidDouble(String prompt, double min, double max)
    {
        int i = 0;   
        boolean isValid = false;
        do
        {
            i = getInt(prompt);
            if(i < min) System.out.println("Value must be >= " + min);
            else if(i > max) System.out.println("Value must be <= " + max);
            else isValid = true;
        } while (isValid == false);

        return i;
    }

    public static String getString(String prompt)
    {
       Scanner sc = new Scanner(System.in);
       String i="";
       boolean isValid;
       do
       {
          try
          {
             System.out.print(prompt + ": ");
             i = sc.nextLine();
             isValid = true;
          } 
          catch (Exception e)
          {
              System.out.print("Invalid Format: ");
              isValid = false;
          }
       } while (isValid == false);
       sc.close();
       return i;
    }

    public static String getValidString(String prompt, int min, int max)
    {
        String i;
        boolean isValid = false;

        do
        {
            i = getString(prompt);
            if(i.length() < min) System.out.println("String must be more than "       + min + " characters.");
            else if(i.length() > max) System.out.println("String must be more     than " + max + " characters.");
            else isValid = true;
        } while (isValid == false);

        return i;
    }
}

解决方案

You have more than one Scanner that you close, which closes the underlying InputStream, therefore another Scanner can no longer read from the same InputStream and a NoSuchElementException results.

For console apps, use a single Scanner to read from System.in.

这篇关于扫描仪NoSuchElementException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆