[英]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.