2013-10-22 116 views
0

我想比較兩個用戶定義的字符串並輸出兩個字符串之間共享字符的數量的計數,而不訴諸使用數組。然後我需要輸出每個字符。我理解使用掃描儀的用戶輸入部分,但事後我很無能。計數和輸出兩個字符串之間的像字符

例如, 「阻礙」 爲字符串1,和 「發生」 爲字符串2將返回:

數共享字符數= 5

共享字符>> 「H」, 「一個」,「P的「,」p「,」e「,」e「

這是我到目前爲止。儘管它在單獨的行上打印每個字符。有沒有陣列將它們全部列在上面的一行上的方法?:

public class CountMatches { 

    public static void main(String[] args) 
    { 
    //Declare both Strings. 
    String word1; 
    String word2; 
    int count = 0; 


    //Call for User Input. 
    Scanner inputDevice = new Scanner(System.in); 
    System.out.print("Input String 1 >> "); 
    word1 = inputDevice.next(); 
    System.out.print("Input String 2 >> "); 
    word2 = inputDevice.next(); 
    inputDevice.close(); 

    //Determine lengths and set label accordingly. 
    String BigWord; 
    String SmallWord; 

    if (word1.length() > word2.length()) 
    { 
     BigWord = word1; 
     SmallWord = word2; 
    } 
    else 
    { 
     BigWord = word2; 
     SmallWord = word1; 
    } 

    //Count and Display the like characters. 
    for (int i = 0; i < SmallWord.length(); i++) 
    { 
     if (BigWord.contains(String.valueOf(SmallWord.charAt(i)))) 
     { 
      System.out.println("both words contain the letter " + SmallWord.charAt(i)); 
      count++; 
     } 
    } 

    //Display the count of like characters.  
    System.out.print("Number of like characters >> " + count); 
    } 

    } 

回答

1

比方說,你有word1word2

String biggerWord; 
String smallerWord; 
if (word1.length() > word2.length()) { 
    biggerWord = word1; 
    smallerWord = word2; 
} else { 
    biggerWord = word2; 
    smallerWord = word1; 
}   
for (int i = 0; i < smallerWord.length(); i++) { 
    if (biggerWord.contains(String.valueOf(smallerWord.charAt(i)))) { 
    counter++; 
    } 
} 

此計算出哪個字就越大。然後,對於smallerWord的長度,一次遍歷一個字符,看看biggerWord是否包含該字符。如果是這樣,請增加計數器。 counter應該在循環結束時具有共同字符的數量。

這是寫意的,所以要注意語法和次要的邏輯錯誤。或者我誤解了你的任務。它應該是非常接近,但。

+0

這實際上是錯誤的,因爲當你迭代較小的長度時,你認爲word2是包含子句中較短的一個。如果你讓word1 =「bbb」和word2 =「aaab」,它會說他們沒有共同的字母。 – mau

+0

你是正確的,需要修改,但原因稍有不同。稱它爲「錯誤」是不準確的(因爲它可以用於許多輸入)和一些苛刻的哈哈。做了一個編輯。請驗證它。欣賞反饋。有了這樣的東西,我很可能犯下愚蠢的錯誤。 – Vidya

+0

是的,錯誤的說法不好。小邏輯錯誤更好:)。這現在起作用。 – mau

0

一個非常好的方法是按字母順序排序字符串。

sortedWord1 = new String(Arrays.sort(word1.toCharArray())); 
sortedWord2 = new String(Arrays.sort(word2.toCharArray())); 

這樣做是將單詞轉換爲字符數組,按字母順序排序,然後再次將它們轉換爲字符串。

下一步是從頭開始迭代並打印出所有常用字符。這會更容易,因爲它們是排序的。

int index1 = 0; 
int index2 = 0; 
while((index1 < sortedWord1.length()) && (index2 < sortedWord2.length()) { 
    if(sortedWord1.charAt(index1) == sortedWord2.charAt(index2)) { 
    System.out.print(sortedWord1.charAt(index1) + " "); 
    index1++; index2++; 
    } 
    else if(sortedWord1.charAt(index1)> sortedWord2.charAt(index2)) { 
    index2++; 
    } 
    else { 
    index1++; 
    } 
} 

我還沒有檢查過它的語法錯誤,但它應該是好的。

+0

可悲的是我不能夠使用數組。 – user2908506

相關問題