Java多个输入导致异常

问题描述

当我以“ 1 2”格式输入时,如果输入为“ 1 enter 2”,则显示错误

我的任务是创建一个lambda,该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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...