为什么在大输入量的时候我的代码会出错
查看原帖
为什么在大输入量的时候我的代码会出错
1520112
Sagineer楼主2024/11/11 10:41


------------

import java.util.Scanner;

public class Main {
    static int n = 0;
    static int m = 0;
    static int j = 0;
    static int k = 0;

    public void MainEleven(char ch, StringBuilder sb) {
        if (ch == 'W') {
            n++;
        }
        if (ch == 'L') {
            m++;
        }
        if ((m == 11 && n <= 9) || (n == 11 && m <= 9)) {
            sb.append(String.format("%d:%d", n, m));
            sb.append("\n");
            m = 0;
            n = 0;
        }
        if ((m >= 12 && n >= 12) && (Math.abs(m - n) >= 2)) {
            sb.append(String.format("%d:%d", n, m));
            sb.append("\n");
            m = 0;
            n = 0;
        }
    }

    public void MainTwentyOne(char ch, StringBuilder sb) {
        if (ch == 'W') {
            j++;
        }
        if (ch == 'L') {
            k++;
        }
        if ((j == 21 && k <= 19) || (k == 21 && j <= 19)) {
            sb.append(String.format("%d:%d", j, k));
            sb.append("\n");
            j = 0;
            k = 0;
        }
        if ((j >= 22 && k >= 22) && (Math.abs(j - k) >= 2)) {
            sb.append(String.format("%d:%d", j, k));
            sb.append("\n");
            j = 0;
            k = 0;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder line = new StringBuilder();

        // 连续读取多行输入并累积
        while (scanner.hasNextLine()) {
            boolean flag = false;
            String input = scanner.nextLine();
            for(int i = 0; i < input.length(); i++) {
                if(input.charAt(i) == 'E') {
                    line.append(input.substring(0,i));
                    flag = true;
                    break;
                }
            }
            if(!flag) {
                line.append(input);
            }else{
                break;
            }
        }

        Main main = new Main();
        StringBuilder eleven = new StringBuilder();
        StringBuilder twentyOne = new StringBuilder();

        // 11分制
        for (int i = 0; i < line.length(); i++) {
            char ch = line.charAt(i);
            main.MainEleven(ch, eleven);
        }
        // 输出 11分制结果
        System.out.print(eleven);
        System.out.printf("%d:%d",n,m);
        System.out.println();
        System.out.println();

        // 21分制
        for (int i = 0; i < line.length(); i++) {
            char ch = line.charAt(i);
            main.MainTwentyOne(ch, twentyOne);
        }
        // 输出 21分制结果
        System.out.print(twentyOne);
        System.out.printf("%d:%d",j,k);


        scanner.close();
    }
}
------------

感谢大佬解答!

2024/11/11 10:41
加载中...