Java - 限制Scanner对象中的令牌数量?

时间:2017-08-06 13:49:25

标签: java count java.util.scanner token

我正在制作一个程序,用户输入两个双打和一个操作符,并执行计算。例如,如果用户输入" 12 - 6",结果将为6.如果用户输入" 12 6 - ",它也可以工作。我正在尝试创建一个错误检查,检查是否有足够的令牌或太多的令牌。我该怎么做?

double num1, num2;
  String operator ;

  DecimalFormat decPattern = new DecimalFormat("#.00");

  System.out.println("");

  Scanner scan = new Scanner(System.in);
  System.out.print("Please enter two operands and an operator > ");

  if (scan.hasNextDouble())
  {
     num1 = scan.nextDouble();

        if (scan.hasNextDouble())
        {
           num2 = scan.nextDouble();

           operator = scan.next();

           scan.close();
        }
        else
        {
           operator = scan.next();

           num2 = scan.nextDouble();

           scan.close();
        }
  }

  else
  {
     operator = scan.next();

     num1 = scan.nextDouble();
     num2 = scan.nextDouble();

     scan.close();
  }

  System.out.println("");

  calc(operator, num1, num2);

}

1 个答案:

答案 0 :(得分:0)

您不必使用Scanner,您可以利用Reader界面实施检查:

    try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
        String line = reader.readLine();
        StringTokenizer tokenizer = new StringTokenizer(line);
        if (tokenizer.countTokens() != 3) {
            System.err.println("Wrong number of arguments");
        }
        while (tokenizer.hasMoreTokens()) {
            // Work with tokens
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

更新(以满足教师要求)

相同,但Scanner

    try(Scanner scanner = new Scanner(System.in)) {
        String line = scanner.nextLine();
        StringTokenizer tokenizer = new StringTokenizer(line);
        if (tokenizer.countTokens() != 3) {
            System.err.println("Wrong number of arguments");
        }
        while (tokenizer.hasMoreTokens()) {
            String token = tokenizer.nextToken();
            // Work with tokens
        }
    }