【问题标题】:Checking input type...how?检查输入类型...如何?
【发布时间】:2011-07-17 00:41:09
【问题描述】:

我有以下方法:

public void addStudent(){

    String fName, lName;
    double mGrade, fGrade;
    System.out.print("\nEnter first name: ");
    Scanner in = new Scanner(System.in);
    fName = in.nextLine();
    System.out.print("\nEnter last name: ");
    lName = in.nextLine();
    System.out.print("\nEnter midterm grade: ");
    mGrade = in.nextDouble();
    System.out.print("\nEnter final grade: ");
    fGrade = in.nextDouble();
    Student toAdd = new Student(fName, lName, mGrade, fGrade);
    students.add(toAdd);
    System.out.println("\nStudent record added.\n");
    System.out.println(students.size());
}

如何检查用户是否为期中成绩和期末成绩输入了整数以外的内容?如果他们输入了一个非整数,我希望该方法再次请求用户输入该值。我猜我将不得不使用 do-while 循环。但是我不知道如何检查类型...

谢谢!

【问题讨论】:

标签: java


【解决方案1】:

您可以使用Scanner.next() 并尝试将其解析为您想要的类型(例如,使用Integer.parseInt(x) 解析为整数,如果失败(抛出和异常)尝试再次解析。

【讨论】:

  • 呃,我在原始帖子中搞砸了。我可以解析双精度吗?
  • 是的,您可以使用Double.parseDouble(x)
【解决方案2】:

是的,做一段时间效果最好。

  int midterm;
  System.out.printLn("Enter midterm grade");
  do
  { 
      try {
          string s = in.nextLine();
          midterm = Integer.parseInt(s);
          break;
      }
      catch (Exception e)
      {
          System.out.printLn("Couldn't parse input, please try again");
      }
  }
  while (true);

【讨论】:

  • 呃,我的描述搞砸了...我可以解析一个双精度数吗?
  • 绝对不要使用整数,而是使用 Double.parse。
【解决方案3】:

你可以使用方法:nextInt() from Scanner

您也可以像这样检查字符串是否为整数:

if( someString.matches("\\d+") ) {
  // it is 
} else {
 // it isn't 
}

【讨论】:

  • 谢谢,这对于我遇到的类似问题非常有效。我更喜欢这个而不是创建一个 try/catch 块。
【解决方案4】:

循环运行输入法,如果用户输入的不是有效的整数或双精度,则重复询问输入。

【讨论】:

    【解决方案5】:

    你可以试试这个

    import java.io.*;
    import java.util.Scanner;
    public class Test {
        public static void main(String args[]) throws Exception {
    
            String input;
            int ch1;
            float ch2;
            String ch3;
    
            Scanner one = new Scanner(System.in);
    
            input = one.nextLine();
    
            try {
                ch1 = Integer.parseInt(input);
                System.out.println("integer");
                return;
            } catch (NumberFormatException e) {
    
    
            }
    
            try {
                ch2 = Float.parseFloat(input);
                System.out.println("float");
                return;
            } catch (NumberFormatException e) {
    
            }
            try {
                ch3 = String.valueOf(input);
                System.out.println("String");
            } catch (NumberFormatException e) {
    
            }
    
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      相关资源
      最近更新 更多