簡體   English   中英

Palindrome 程序適用於單個測試用例,但在其他情況下繼續輸入

[英]Palindrome program works fine for a single test case but keeps taking input otherwise

public static void main(String[] args) {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int test_cases = Integer.parseInt(br.readLine());
        if (test_cases >= 1 && test_cases <= 20) {
            String[] ans = new String[test_cases];
            for (int i = 0; i < test_cases; i++) {
                char[] n = br.readLine().toCharArray();
                int k = 0;
                int j = n.length - 1;
                while (k <= j) {
                    if (n[k] == n[j]) {
                        k++;
                        j--;
                        ans[i] = "wins";
                    }
                    else
                        ans[i] = "loses";
                }
            }
            for (String s : ans)
                System.out.println(s);
        }
    }
    catch (Exception x) {
    }
}

問題陳述:輸入的第一行包含一個 integer T,即測試用例的數量。 接下來是包含 integer N 的 T 行。對於每個輸入 output,如果數字是回文則“贏”,如果不是回文,則在新行中“輸”。

對於 test_cases=1,程序運行良好,但對於 test_cases>1,程序繼續接受輸入。 我已經解決了回文問題,但我仍然無法理解這段代碼有什么問題。 誰能向我解釋為什么它一直在接受輸入?

對於非回文,您的代碼在無限循環中運行。 只需為此添加休息時間。

while (k <= j) {
    if (n[k] == n[j]) {
        k++;
        j--;
        ans[i] = "wins";
    }
    else {
        ans[i] = "loses";
        break;
    }
}

這可以是解決方案之一。

public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int test_cases = Integer.parseInt(br.readLine());
            if (test_cases >= 1 && test_cases <= 20) {
                for (int i = 0; i < test_cases; i++) {
                    char[] n = br.readLine().toCharArray();
                    int k = 0;
                    int j = n.length - 1;
                    boolean flag=false;
                    while (k <= j) {
                        if (n[k] == n[j]) {
                            k++;
                            j--;
                            flag=true;
                        }
                        else{
                            flag=false;
                            break;
                        }
                    }
                    if(flag)    System.out.println("wins");
                    else    System.out.println("loses");
                }
            }
        }
        catch (Exception x) {
        }
    }

對於不是回文的字符串,您的循環將無限運行。 此外,您不需要將所有測試用例的結果存儲在一個數組中,您可以每次為每個測試用例打印它。 但是,如果您打算稍后存儲字符串並顯示結果,則可以使用類似 StringBuffer 類的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM