2016-03-29 49 views
-1

這個anagram項目運作良好,但對於像「自戀/一個人危機」這樣的一些例子,輸出應該是錯誤的,因爲自戀中有額外的「s」,但它確實如此。我對編碼很陌生,所以我只需要一些幫助來解決這個問題。針對java的超級anagram幫助

import java.util.Scanner; 

public class SuperAnTester{ 

public static void main(String[] args){ 
    System.out.println("Enter a phrase: "); 
    Scanner scan = new Scanner(System.in); 
    String s1 = scan.nextLine(); 
    System.out.println("Enter a second phrase:"); 
    String s2 = scan.nextLine(); 
    SuperAnagram tester = new SuperAnagram(s1,s2); 
    System.out.println(tester.isSuperAnagram()); 

    } 
} 

這裏是測試部分:

繼承人即需要輸入代碼

public class SuperAnagram{ 

public String s1; 
public String s2; 
public char s1Array[]; 
public char s2Array[]; 

public SuperAnagram(String firstStr, String secondStr){ 
    s1=firstStr; 
    s2=secondStr; 
    } 
public void s1Char(){ 
    s1=s1.toLowerCase(); 
    s1Array=s1.toCharArray(); 

} 

public void s2Char(){ 
    s2=s2.toLowerCase(); 
    s2Array=s2.toCharArray(); 
} 

public boolean isSuperAnagram(){ 
s1Char(); 
s2Char(); 

boolean isSuperAnagram=false; 

if (s1Array.length > s2Array.length){ 
    isSuperAnagram=false; 
    return isSuperAnagram; 
    } 

else{ 

for (int x=0; x<s1Array.length; x++){ 
    char let = s1Array[x]; 
    for (int j=0; j < s2Array.length; j++){ 
     if (s2Array[j] == let){ 
      isSuperAnagram = true; 
      s2Array[j]= ' '; 
     } 

     } 
    } 
    } 

return isSuperAnagram; 
} 
} 
+0

是否有上了班,或者你被允許使用的方法沒有什麼限制?有一個更簡單的方法來檢查anagrams。 –

+0

由於「o」 –

+0

,所以它更顯然不是一個字謎因此,如果if(s2Array [j] == let)爲真,那麼您將'isSuperAnagram'設置爲'true' ...以及如果下一個檢查是否對每個其他字符都是錯誤的?如果找不到'let'的匹配字符,它不會重置它(或直接返回false)嗎? – Tom

回答

0
if (s1Array.length > s2Array.length){ 
    isSuperAnagram=false; 
    return isSuperAnagram; 
} 

沒有測試你的代碼,但在我看來,你應該替換>!=

0

首先,我會建議刪除所有空格:

你的問題
s = s.toLowerCase().replaceAll(" ", ""); 

一個是:

for (int x=0; x<s1Array.length; x++){ 
    char let = s1Array[x]; 
    for (int j=0; j < s2Array.length; j++){ 
     if (s2Array[j] == let){ 
      isSuperAnagram = true; 
      s2Array[j]= ' '; 
     } 
    } 
} 

只要一個字符匹配您設置isSuperAnagram真永遠。

重新寫的東西,如:

for (int x=0; x<s1Array.length; x++){ 
    isSuperAnagram = false; 
    char let = s1Array[x]; 
    for (int j=0; j < s2Array.length; j++){ 
     if (s2Array[j] == let){ 
     isSuperAnagram = true; 
     break; 
     } 
    } 
    if (!isSuperAnagram) { 
     break; 
    } 
} 
+1

哦!你是對的。謝謝你提到這一點。我會更新我的建議。 – hanif