所以,我正在尝试创建一个计算考试成绩的程序。我们要做的是给出一个由X和0组成的字符串的模式,即000XXX000XXX,其中' X'是0并且每个零的值是1并且对于每个连续的' 0'值增加1。如果假设有2个或更多连续的0&s,然后是' X' ' 0'的价值重置为1.如果程序看起来很常见,那么,是的,这是来自OJ的一个问题,它是由我大学的一位大四学生给我解决的。现在问题是我已经弄清楚代码是如何工作的并解决了这个问题。但是代码中似乎存在问题。
package javaapplication4;
import java.util.Scanner;
public class JavaApplication4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T, score = 0, f = 0, g = 0;
String str;
int len;
T = sc.nextInt();
for (int i = 1; i <= T; i++) {
str = sc.nextLine();
len = str.length();
for (int j = 0; j < len; j++) {
if (str.charAt(j) == '0') {
f++;
score = score + f;
}
else if(str.charAt(j) == 'X')
{
f = 0;
score = score + g;
}
}
System.out.println(score);
}
}
}
从代码中可以看出,我首先给出一个测试用例数量的输入,一旦按下回车键,代码就会自动显示得分值(即0),而不会在内部进行任何思考环。 我已经重新检查了所有花括号,但我找不到代码中的错误。如果能得到一些帮助,我会很高兴。
Output:
4
0
答案 0 :(得分:0)
sc.nextInt()会触发sc.nextLine(),因此您可以通过使用sc.nextLine()输入一个空字符串的输出,该字符串的原因为零#0。您的测试用例编号可以防止这种情况:
int score = 0;
System.out.println("Enter test case:");
int testCase= Integer.parseInt(sc.nextLine());
for (int i = 1; i <= testCase; ++i)
{
System.out.println("Enter pattern:");
String str = sc.nextLine();
for (int j = 0; j < str.length(); j++)
{
if (str.charAt(j) == '0')
{
score += 1;
}
else if (str.charAt(j) == 'X')
{
score += 0;
}
}
System.out.println(score);
score = 0; // reset score to zero for the next test case
}
有关sc.nextInt()问题,请参阅此链接:Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods