我在使用扫描仪输入int时遇到问题。在getInputs方法中,如果我不包含if(in.hasNextInt())...我得到错误:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Solution.getInputs(Solution.java:30)
at Solution.main(Solution.java:7)
然而,随着包含这一行,我陷入无限循环,因为尽管我多次在控制台中输入一个数字,但它永远不会评估是否存在int所以int n永远不会改变值。我试过搜索,每个人都说要使用if(in.hasNextInt())但是找不到破解无限循环的解决方案。我迷路了,无法理解。我已经尝试过conditioninig
while(in.hasNextInt()) {
n = in.nextInt();
if (n > 0) break;
}
但这只是跳过循环。老实说,我迷路了。
import java.util.*;
public class Solution{
public static void main(String[] args) {
int t = getTestCases();
int[] inputs = getInputs(t);
int[] solutions = getSolutions(inputs);
for (int i = 0; i < solutions.length; i++) {
System.out.println(solutions[i]);
}
}
static int getTestCases() {
int t = getNumber();
while(t <= 0 && t > 15) {
t = getNumber();
}
System.out.println("t = " + t);
return t;
}
static int[] getInputs(int t) {
int[] inputs = new int[t];
for (int i = 0; i < t; i++) {
int n = getNumber();
while (n <= 0) {
n = getNumber();
}
inputs[i] = n;
}
return inputs;
}
static int[] getSolutions(int[] inputs) {
int[] solutions = new int[inputs.length];
for (int i = 0; i < solutions.length; i++){
solutions[i] = findDigits(inputs[i]);
}
return solutions;
}
static int findDigits(int n) {
int total = 0;
String str = "" + n;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
int d = Character.getNumericValue(ch);
if (d != 0) {
if (n % d == 0) total++;
}
}
return total;
}
static int getNumber() {
Scanner in = new Scanner(System.in);
int n = -1;
if(in.hasNextInt()) n = in.nextInt();
in.close();
return n;
}
}
答案 0 :(得分:1)
为什么每次循环都要创建和关闭扫描仪?
在方法开头创建一个扫描仪,并在返回之前关闭它。那应该是你排除。
static int[] getInputs(int t) {
Scanner in = new Scanner(System.in);
int[] inputs = new int[t];
for (int i = 0; i < t; i++) {
int n = 0;
while (n <= 0) {
if (in.hasNextInt()) n = in.nextInt();
}
inputs[i] = n;
}
in.close();
return inputs;
}