2011-03-15 27 views
1

Im新的java編程語言,需要幫助編寫一個類在文本中打印單詞排列的Anagrams。例如:紅色車 - >紅色車,紅色車。這是我迄今爲止所寫的內容,我認爲即時通訊的正確軌道上,即使我的代碼沒有完成,我至少會想讓它運行。Java類Anagrams

import javax.swing.JOptionPane; 

public class Anagrams 
{ 

private String x; 
private char[] xarray; 
private String[] words; 

public void Anagrams(String phrase1) 
{ 
    x = phrase1; 
} 

public void printPerms() 
{ 
    int perms = 0; 
    xarray = x.toCharArray(); 
    for (int i = 0; i < x.length(); i++) 
    { 
     if(xarray[i] == ' ') perms = perms + 1; 
    } 

    words = x.split(" "); 
    for (int i = 0; i < perms; i++) 
    { 
     System.out.println(words[i]); 
    } 
} 

public void main(String args[]) 
{ 
    String phrase1 = JOptionPane.showInputDialog("Enter phrase 1."); 
    Anagrams(phrase1); 
    printPerms(); 
} 


} 

這是我嘗試運行時得到的錯誤。

Exception in thread "main" java.lang.NoSuchMethodError: main 

現在,我只是想讓我的程序運行不打印出排列。我認爲一旦它至少印出一些東西,我就可以弄清楚。有人可以告訴我爲什麼它沒有運行,並且如果有其他方式,而不是JOptionPane,如何從用戶輸入如C++ cin >>。

謝謝

+0

你需要讓你的主要功能'static':'公共靜態無效的主要(...)' – Gabe 2011-03-15 13:41:00

回答

5

主要方法需要是靜態的。

如何:

public static void main(String args[]) 
{ 
    String phrase1 = JOptionPane.showInputDialog("Enter phrase 1."); 
    new Anagrams(phrase1).printPerms(); 
} 
+0

作爲一個說明,他也需要做出字謎構造,這是目前一個'公共無效'方法。 – Anon 2011-03-15 14:01:57

+0

@Anon是的,可能還修復了其他一些地方,但我不打算修復他的所有代碼:-) – 2011-03-15 14:02:46

0

您在缺少static

public void main(String args[]) 

main方法需要是靜態的。

此外,您直接從main(無對象)呼叫printPerms,因此它必須靜態或調用它們在Anagram類對象上。

你缺少new關鍵字,同時創建該對象:

Anagrams(phrase1); 
printPerms(); 

嘗試

new Anagrams(phrase1).printPerms(); 

還沒有Anagram類構造函數一個String。你有一個名爲Anagram的方法,因爲你已經指定了返回類型。

public void Anagrams(String phrase1) { 

刪除void

1

即使將主方法聲明爲靜態方法,您可能會也可能不需要將所有其他方法設置爲靜態方法(如果在不使用對象的情況下直接調用方法會使方法靜態)。因爲靜態方法可以調用或僅使用靜態數據記憶或方法。

而在你的代碼,因爲你已經定義中包含你需要做其他方法也可以作爲靜態的主要方法同一類的所有方法。

+3

您應該可以創建一個對象,並從那裏調用函數(如@ sean-patrick -floyd回答)。他們不需要全部都是靜態的 – Nanne 2011-03-15 13:45:27

+0

@Nanne謝謝。我知道@ sean-patrick-floyd說了什麼。我只是在暗示這也可以完成。 – Algorithmist 2011-03-15 13:51:26

+0

但是你說在這個例子中所有其他的方法必須是靜態的,這是不正確的,不是嗎? – Nanne 2011-03-15 13:54:19

1

如果兩個參數是對方的anagrams,則方法應該返回true,否則返回false。 例如,anagram(「glob」,「blog」)將返回true;並且anagram(「glob」,「blag」) false。 假設輸入字符串將只包含字母和空格。將大寫和小寫字母視爲完全相同,並忽略空格。

<br/> Uses the following algorithm: 
<ul> <li> clean input strings from spaces and convert to lower case 
</li> <li>convert to char array and sort them 
</li> <li>if sorted arrays are identical, words are anagrams 
</li></ul> 
*/ 

public static boolean anagram(String str1, String str2) 
{ 
     //handle nulls 
     if(str1==null && str2==null) 
     return true; 
     else if((str1==null && str2!=null) || (str2==null && str1!=null)) 
     return false; 

     //clean input strings from spaces and convert to lower case 
     String s1 = str1.replace(" ", "").toLowerCase(); 
     String s2 = str2.replace(" ", "").toLowerCase(); 

     //convert to char array and sort them 
     char[] cArr1 = s1.toCharArray(); 
     char[] cArr2 = s2.toCharArray(); 
     java.util.Arrays.sort(cArr1); 
     java.util.Arrays.sort(cArr2); 

     //if sorted arrays are identical, words are anagrams 
     s1 = new String(cArr1); 
     s2 = new String(cArr2); 
     return s1.equals(s2); 
    } 
    public static void main(String[] args) 
{ 
    //test: anagram(「glob」, 「blog」) would return true; anagram(「glob」, 「blag」) false. 

     System.out.println("anagram(「glob」, 「blog」):"+(anagram("glob", "blog"))); 
     System.out.println("anagram(「glob」, 「blag」):"+(anagram("glob", "blag"))); 
    }