2016-11-16 79 views
1

我在做一個計算機科學的小項目。我正在編寫一個代碼來測試一個字符串輸入是迴文,還是一個前後相同的短語,例如。向後讀時,「racecar」=「racecar」。我的「掃描儀」輸入沒有被記錄?什麼都沒有返回

Scanner keyboard = new Scanner(System.in); 
     System.out.println("Enter a palindrome or something...: "); 
     String myLine = keyboard.nextLine(); 
     Palindrome test = new Palindrome(); 
     test.setPaly(myLine); 
     System.out.println(test); 

我的掃描儀進入一個變量「MYLINE」這是我從代碼的最後塊扔進另一個文件中我等一段代碼,通過一個toString稱爲通過System.out.println(test)

public void setPaly(String setp) 
    { 
     in = setp; 
     boolean b1 = true; 
     int x = 0; 
     while(x<in.length()) 
     { 
      b1 = Character.isLetter(x); 
      if (b1 != false) 
      { 
       paly = paly + in.substring(x, x+1); 
      } 
      x++; 
     } 
    } 

看,'paly'和'in'都是預先初始化的,但那不是我的問題......我的問題來了:'paly'從來沒有被實際覆蓋。這是爲什麼?我完全不理解...所以請給我解釋一下,而不僅僅是給我一個答案。

我使用codeboard.io做這一點,正因爲如此,你可以看看我的全部代碼(如果它實際上不是代碼在所有這些塊的一部分)這裏:(https://codeboard.io/projects/33278?view=21.1-2.0): 鏈接

+1

如果你想讓'setPaly()'決定一個輸入是否是迴文,那麼你應該返回一個'boolean'響應,而不是保留'void'。另外,我沒有看到'in'正在被初始化。 –

+1

在該循環中及其周圍添加一些臨時system.out.prints,以便跟蹤in,x,paly等的值。這是一種很好且簡單的調試技術。它將揭示發生了什麼。 –

+2

'Character.isLetter(x);'...你可能想要記住'x' ***真***是......提示:不是一封信。 (至少不適用於短字符串) – Tom

回答

2

這是一個非常簡單的問題,甚至可能是一個簡單的錯字。 你行

b1 = Character.isLetter(x) 

是,我想,試圖檢查是否在X字符串中的值是一個字符。 然而,它確實不是這樣做,原因有幾個。


X是int。如果我們檢查的文件,我們發現如下:

isLetter(int codePoint) 
Determines if the specified character (Unicode code point) is a letter. 

當您通過isLetter的INT(X,它將從0數到一些合理的低價值),它只是簡單地檢查,如果這些代碼點是字母。第一個Unicode字母是在U + 0041,事實上,如果您在程序中輸入的字符超過41個字符,它將開始返回值。

我想你在找什麼是

b1 = Character.isLetter(in.charAt(x)); 

這是指數值的簡單歸併與值的指數,這將是通常預編譯抓住一個問題,但不是因爲isLetter的額外方法。

因爲它永遠不會返回,因爲它的代碼點是一個字母(直到您通過初始控制字符和gubbins),條件從未如此,因此不會修改paly

+0

omg ...你是對的。 –

1

你的主要問題不在於邏輯,而在於你在檢查什麼。

 // .... 
     while(x<in.length()) 
     { 
      // This is actually checking the number stored in x 
      // a number is never a letter 
      b1 = Character.isLetter(x); 
      // ....   
     } 

你應該問在SETP炭和檢查值,而不是 嘗試做

b1 = Character.isLetter(setp.charAt(x)); 
0

我的代碼第二主體(即我貼)是源我的位置問題。我一直在試圖引用int x,但實際上我的意思是做一些類似in.charAt(x)的操作,它會引用輸入中x的位置中的字符,它被設置爲相等。

+0

現在我覺得很愚蠢,它很簡單'(-___-)' –