2016-02-24 97 views
0

對於Java練習,我正在編寫一個程序,用戶輸入兩個字符串。程序然後檢查兩個字符串是否共享任何相似的字符並將它們輸出到屏幕上。顯示兩個字符串之間共享的字符

例如,Terrarium和Terraform是它應該打印的兩個字符串。但是,當我運行我的程序時,它總是隻輸出第一個字符串中的所有字符。 (在這種情況下,請選擇)

我懷疑我基於對循環的有限理解而創建了邏輯錯誤。但是當我尋找答案時,人們似乎總是對我自己使用類似的方法。

這裏是您觀看代碼:

import java.util.Scanner; 

    public class CountMatches 
    { 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 
     System.out.println(" Please enter a String >> "); 
     String stringA = keyboard.nextLine(); 
     System.out.println(" Please enter another String >> "); 
     String stringB = keyboard.nextLine(); 

     for(int counter = 0; counter < stringA.length(); counter++) 
     { 
      char compareA = stringA.charAt(counter); 
      char compareB = stringB.charAt(counter); 
      //System.out.println(compareA); 
      //System.out.println(compareB); 
      //System.out.println(""); 

      if(compareA != compareB) 
      { 
       System.out.println(""); 
      } 
      else if(compareA == compareB); 
      { 
       System.out.println(compareA); 
       System.out.println(""); 
      } 
     } 
    } 
    } 
+1

您是否試圖通過調試器逐句通過算法?這是查找邏輯錯誤的最佳方式。 – nolexa

+0

如果我正確理解你的意圖,它不應該打印出「t r r r r r r」,它應該打印出「t r r r r r m」,因爲它們最後都有一個「m」。 –

回答

1
else if(compareA == compareB); 

擺脫對這一行的分號,它應該工作。我也會擺脫第一個如果陳述只是保持第二個。

+0

謝謝不知道爲什麼我把分號放在那裏.....我曾經嘗試過多種代碼組合,並且越來越累,所以它可能是一個意外。 – dpolaristar

0

這個代碼有兩個問題。

首先,

for(int counter = 0; counter < stringA.length(); counter++) 

如果兩個字符串的長度不同,你可以得到通過摘另一個字符串的結尾異常。所以,這樣做:

int len = stringA.length(); 
if (len > stringB.lengh()) len = stringB.length(); 

接下來,你編碼失敗的原因是因爲你有一個;在你的其他地方結束。你的代碼應該是:

 if(compareA != compareB) 
     { 
      System.out.println(""); 
     } 
     else // Don't need the == here 
     { 
      System.out.println(compareA); 
      System.out.println(""); 
     } 

祝你好運。

+0

謝謝你的len檢查.....不知道我沒有想到它。 – dpolaristar

相關問題