用户输入错误,没有抛出异常或使用try {} catch {}

时间:2016-12-12 16:36:29

标签: java input user-input

我正在尝试创建一个使用while循环的方法,该循环包含一个前瞻方法来处理错误的用户输入:输入1-10范围或输入字符串。我试图通过抛出异常或使用try {} catch {}来做到这一点;如果可能的话。我还没有发现一个不使用这些的帖子,到目前为止我的所有尝试都失败了。一个基本的想法将起作用。

如果输入正确,

将不会停止

import java.util.*;
public class UserErrors{

  public static Scanner console = new Scanner(System.in);
  public static void main(String[]args){
    String s  = "Enter a integer between 1-10: ";
  get(s);
  }
  public static int get(String prompt){

    System.out.print(prompt);
    while(console.hasNext()){
      while(!console.hasNextInt()){
        console.next();
        System.out.println("Invalid data type");
        System.out.print(prompt);
      }
      if(console.nextInt() > 10 || console.nextInt() <1){
        System.out.println("not in range");
        System.out.print(prompt);
      }
    }
    return console.nextInt();
  }
}

要求正确的答案在停止之前被估算3次

import java.util.*;
public class UserErrors{
  public static Scanner console = new Scanner(System.in);
  public static void main(String[]args){
    String s  = "Enter a integer between 1-10: ";
  get(s);
  }
  public static int get(String prompt){

    System.out.print(prompt);
    boolean b = false;
    while(!b){
      if(!console.hasNextInt()){
        console.next();
        System.out.println("Invalid data type");
        System.out.print(prompt);
        console.nextInt();
      }
      else if(console.nextInt() < 10 && console.nextInt() >1){
        b = true;
      }
      else{
        System.out.println("not in range");
        System.out.print(prompt);
        console.nextInt();
      }
    }
    return console.nextInt();
  }
}

我也删除了其他一些失败的尝试。我需要修理什么(基本想法会做什么)?

3 个答案:

答案 0 :(得分:2)

有一个错误:

if(console.nextInt() > 10 || console.nextInt() <1){ ... }

将此行更改为:

int i = console.nextInt();
if(i > 10 || i <1){ ... }

你不能重复使用console.next ...():)

答案 1 :(得分:0)

每个nextInt调用都是一个阻塞调用,它等待用户输入。 当你在下面写下你的代码:

    if(console.nextInt() < 10 && console.nextInt() >1)

本质上,控制台等待第一个用户输入,将其与10进行检查,然后等待下一个输入(可能是任何输入)(不一定是相同的),不一定相同,等待,最后输入if条件。< / p>

控制台输入应始终预先设置并分配给我们的本地变量,然后需要检查您的条件,如下所示:

    int userInput = console.nextInt();

然后使用userInput变量进行检查:

    if(userInput < 10 && userInput >1)

答案 2 :(得分:0)

Scanner类的nextInt()方法读取标准出口

import java.util.*;

public class UserErrors{
  public static Scanner console = new Scanner(System.in);
  public static void main(String[]args){
    String s  = "Enter a integer between 1-10: ";
     get(s);
  }

  public static int get(String prompt){    
    boolean b = false;
    int number;
    while(!b){
      System.out.print(prompt);
      if(!console.hasNextInt()){
        console.next();
        System.out.println("Invalid data type");
        System.out.print(prompt);
        console.nextInt();
      }else {
        number = console.nextInt();
        if(nb<1 || nb>10){
            System.out.println("not in range");
        }else{
           b=true;
        }
      }
    }
    return nb;
  }
}