How to type a string to end a integer Scanning process in Java

天大地大妈咪最大 提交于 2021-02-05 07:59:06

问题


I would like to use Scanner to scan any number of integer then get the average. Before I stop, I would like to type "END".

The code below has: Exception in thread "main" java.util.InputMismatchException error. That is because I scan a string rather than int type.

How should I solve this problem?

Thanks

public static int scanaverage()
{
System.out.println("Enter any number, type 'END' to exit");
Scanner input = new Scanner(System.in);
int total=0; 
int count = 0;

while (!(input.nextLine().equals("END")))
{
total += input.nextInt();
count += 1;
}
return total / count;
}

回答1:


You could just scan the whole line and check if the line is a number like this

public static int scanaverage() {
    System.out.println("Enter any number, type 'END' to exit");
    Scanner input = new Scanner(System.in);
    int total = 0;
    int count = 0;
    String line;
    do {
        line = input.nextLine();
        try {
            total += Integer.parseInt(line); // Cast the number, if it does not succeed catch the exception.
            count += 1;
        } catch(NumberFormatException e) {
            if(!line.equalsIgnoreCase("end")) { // Wrong input
                System.out.println("Wrong input, input another number or end");
            }
        }
    } while (!line.equalsIgnoreCase("end"));
    return total / count;
}



回答2:


The Exception is due to two read operation for getting one number, For Example take input as

1

2

3

END

Debug:

while loop condition input.nextLine() will fetch 1 then input.nextInt() will fetch 2 while loop condition input.nextLine() will fetch 3 then input.nextInt() will fetch END --> This will throw InputMismatchException

Hope the bellow code will work, except the part that Any non int input will break the loop

public static int scanaverage()
{
System.out.println("Enter any number, type 'END' to exit");
Scanner input = new Scanner(System.in);
int total=0; 
int count = 0;

while (input.hasNextInt()))
{
total += input.nextInt();
count += 1;
}
return total / count;
}



回答3:


You can simply add a try catch block as follows.

public static int scanaverage()
{
  System.out.println("Enter any number, type 'END' to exit");
  Scanner input = new Scanner(System.in);
  int total=0; 
  int count = 0;

  while (!(input.nextLine().equals("END")))
  {
   try{
    total += input.nextInt();
    count += 1;
    }catch(InputMismatchException e){

    }
  }
  return total / count;
}

I haven't test it.



来源:https://stackoverflow.com/questions/33999566/how-to-type-a-string-to-end-a-integer-scanning-process-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!