输出自动显示而不执行任何操作

时间:2017-03-27 14:22:52

标签: java

所以,我正在尝试创建一个计算考试成绩的程序。我们要做的是给出一个由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

1 个答案:

答案 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