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
当我以“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