Java 多个输入导致异常

Java multiple inputs lead to an exception

当我以“1 2”格式输入时出现错误,如果“1 输入 2”出现错误

我的任务是创建一个 lambda,它具有处理了解用户输入是什么的函数。 用户可以选择确定奇数、偶数、素数、复合数或回文数。但我不能将其用作参考,因为它没有给出任何有关如何使用它的说明。

第一个给

Exception in thread "main" java.lang.NumberFormatException: For input string: "4 1"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at Lambda_Project/Project.Solution.main(Solution.java:45)

第二个是

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.StringTokenizer.nextToken(StringTokenizer.java:348)
    at Lambda_Project/Project.Solution.main(Solution.java:53)

这是代码...

import java.io.*;
    import java.util.*;
    interface PerformOperation {
        boolean check(int a);
    }
    class MyMath {
        public boolean checker(PerformOperation p, int num) {
            return p.check(num);
        }
    
        public PerformOperation is_odd() {
            return n -> (n & 1) == 1;
        }
    
        public PerformOperation is_prime() {
            // O(n^(1/2)) runtime
            return n -> {
                if (n < 2) {
                    return false;
                }
                int sqrt = (int) Math.sqrt(n);
                for (int i = 2; i <= sqrt; i++) {
                    if (n % i == 0) {
                        return false;
                    }
                }
                return true;
            };
        }
    
        public PerformOperation is_palindrome() {
            return n -> {
                String original = Integer.toString(n);
                String reversed = new StringBuilder(Integer.toString(n)).reverse().toString();
                return original.equals(reversed);
            };
        }
    }
    
    public class Solution {
        public static void main(String[] args) throws IOException {
            MyMath ob = new MyMath();
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int T = Integer.parseInt(br.readLine());  // IT ERRORS HERE
            PerformOperation op;
            boolean ret = false;
            String ans = null;
            while (T--> 0) {
                String s = br.readLine().trim();
                StringTokenizer st = new StringTokenizer(s);
                int ch = Integer.parseInt(st.nextToken());
                int num = Integer.parseInt(st.nextToken()); // AND HERE
                if (ch == 1) {
                    op = ob.is_odd();
                    ret = ob.checker(op, num);
                    ans = (ret) ? "ODD" : "EVEN";
                } else if (ch == 2) {
                    op = ob.is_prime();
                    ret = ob.checker(op, num);
                    ans = (ret) ? "PRIME" : "COMPOSITE";
                } else if (ch == 3) {
                    op = ob.is_palindrome();
                    ret = ob.checker(op, num);
                    ans = (ret) ? "PALINDROME" : "NOT PALINDROME";
                }
                System.out.println(ans);
            }
        }
    }

"1 2" 不是表示 int 的字符串,因此无法将其解析为 int.

您需要拆分这样一个输入,然后您可以将各个元素解析为 int 值并对它们执行所需的算术运算,例如

public class Main {
    public static void main(String[] args) {
        String input = "1 2";
        String[] arr = input.split("\s+");// Split on whitespace
        for (String s : arr) {
            System.out.println(s + " + 10 = " + (Integer.parseInt(s) + 10));
        }
    }
}

输出:

1 + 10 = 11
2 + 10 = 12