我正在尝试运行以下代码,当使用int-numtest=sc.nextline()时该代码不起作用,而当使用int-numtest=integer.parseint(sc.nextline())时该代码工作正常。但我试图在这里只获取一个整数值,通过它我可以从用户那里获取字符串集的数量。那么为什么我不能使用sc.nextint()?
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
**try{
int numTest = Integer.parseInt(sc.nextLine());
for(int i = 0; i < numTest; i++){
String ch = sc.nextLine();
if(isBalanced(ch)){
System.out.println("YES");
} else {
System.out.println("NO");
}
}**
} catch(Exception e){
System.out.println("Invalid Input");
}
}
public static boolean isBalanced(String s){
if(s == null || s.length() % 2 != 0) return false;
Stack<Character> stack = new Stack<Character>();
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(c == '(' || c == '{' || c == '['){
stack.push(c);
} else if(c == ')' || c == '}' || c == ']'){
if(!stack.isEmpty()){
char latestOpenP = stack.pop();
if(latestOpenP == '(' && c != ')'){
return false;
} else if(latestOpenP == '{' && c != '}'){
return false;
} else if(latestOpenP == '[' && c != ']'){
return false;
}
} else {
return false;
}
}
}
return stack.isEmpty();
}
}
2条答案
按热度按时间jchrr9hc1#
sc.nextline()将整个文本带到下一个换行符(按enter键)。如果使用nextint(),下次尝试使用时,扫描仪将挂断。
2uluyalo2#
它们具有不同的功能:
nextInt()
将读取下一个令牌(并转换为int
),也就是说,直到下一个空格字符(默认)-它不会使用该空格字符nextLine()
将读取整行(或当前行中尚未读取的内容),并将使用行尾的换行符-因此下一次扫描将从下一行开始如果你想阅读整行文字,请使用
nextLine()
最终parseInt()
如果需要整数。如果一行中可以给出多个数字,请使用nextInt()
,但请参见扫描仪在使用next()或nextfoo()后跳过nextline()?。注意:你也可以打电话
nextLine()
之后nextInt()
忽略该行的其余部分并跳到下一行(可能需要忽略或隐藏输入错误!)在我看来,最好使用parseInt(nextLine())
组合以发出最终无效输入的信号。