2014-09-22 174 views
0

我學習java一步一步:爲什麼布爾值沒有改變?

我有一個實踐問題problem statement link,這是我的代碼:

import java.util.Scanner; 

public class Solution { 

public static void main(String[] args) { 
    int test, numProcess = 0; 
    boolean checkString ; 
    String alpha = "abcdefghijklmnopqrstuvwxyz"; 
    Scanner sc = new Scanner(System.in); 
    test = sc.nextInt(); 
    for (int i = 0; i < test; i++) { 
     String original = sc.nextLine(); 
     checkString = checkPalindrome(original); 
     while (!checkString) { 
      char oldchar = original.charAt((original.length() - 1)); 
      char newchar = alpha.charAt((original.indexOf(oldchar) - 2)); 
      original = original.substring(0, original.length()-1)+ newchar; 
      checkString = checkPalindrome(original); 
      numProcess++; 
     } 
     System.out.println(numProcess); 
    } 

    sc.close(); 
} 

public static boolean checkPalindrome(String original) { 
    String newString = ""; 
    for (int i = (original.length() - 1); i >= 0; i--) { 
     newString += original.charAt(i); 
    } 
    return (newString.equals(original)); 
} 
} 

的問題是,當我們試圖爲輸入,

  1. ​​爲字符串(IN WHILE LOOP)第一次迭代使得original = abb 然後進入函數,它在第二次迭代中返回false(即是)
  2. orig inal = aba應該返回checkString = true;
  3. 下一次while循環應該被繞過,但它再次進入 while循環(我在調試器中試過這個)並且在包含newchar(索引超出範圍)的 行中拋出異常是什麼問題?
+0

請你能工作的問題的格式,使其可讀性。 – NPE 2014-09-22 10:16:34

回答

0
for (int i = (original.length() - 1); i > 0; i--) 

您的新字符串不包含第一個字符:「abc」字符串將變爲「cb」。你應該改變你的條件爲i >= 0i > -1

+0

同樣的問題出現..更改爲您的建議@TEXHIK – 2014-09-22 10:39:06

+0

因此,使用調試。在返回行檢查什麼值有原始字符串和新字符串,使用斷點或'System.out.print()' – TEXHIK 2014-09-22 11:41:27

+0

我發佈了答案....感謝您的幫助! ! – 2014-09-22 11:42:33

1

首先,如果你把輸入作爲abc。你的代碼會拋出異常

Scanner sc = new Scanner(System.in); 
test = sc.nextInt(); // reading an int 

當你把abc

您正在嘗試查找給定的字符串是否是迴文,您可以輕鬆地按照以下方式進行操作。

public static boolean isPalindrome(String original) { 
    StringBuilder sbOriginal = new StringBuilder(); 
    sbOriginal.append(original); 
    StringBuilder sbReverse=sbOriginal.reverse(); 
    return sbOriginal.toString().equals(sbReverse.toString()); 
} 

Run This code

+0

作爲測試和字符串放在一行(與空間之間)它將工作(僅爲1個測試用例) – 2014-09-22 10:22:59

+0

我跟着你的代碼,但給我同樣的問題 – 2014-09-22 10:42:06

+0

@ user3985848你可以使用我提供的鏈接運行我的代碼。只要運行它。你可以看到這是工作正常 – 2014-09-22 10:44:47

0

我已經弄清楚什麼是真正的問題..當通過掃描儀讀取字符串時,例如格式爲testcase(多少個int)和字符串(檢查此字符串解決方案) - > 1 abc ..這個字符串會被當作「abc」而不是「abc」,這是我通過sc.nextLine()來接受字符串作爲輸入的錯誤。它應該用作sc.next(); 所以checkPalindrome總是返回false ... hushhhhh !!!終於得到了解決方案..

如果我是對的投票吧