Java类Anagrams

时间:2011-03-15 13:38:37

标签: java class

我是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&gt;&gt;等输入。

由于

4 个答案:

答案 0 :(得分:5)

主要方法需要是静态的。

这个怎么样:

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

答案 1 :(得分:1)

甚至在将main方法声明为静态之后,您可能需要也可能不需要将所有其他方法设置为静态(如果不使用对象直接调用方法,则将方法设置为静态)。因为静态方法可以调用或仅使用静态数据成员或方法。

在您的代码中,因为您已经在同一个类中定义了包含main方法的所有方法,您需要将其他方法也设置为静态。

答案 2 :(得分:1)

如果两个参数是彼此的字谜,则该方法应该返回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")));
   }

答案 3 :(得分:0)

您遗失了static

public void main(String args[])

main方法必须是静态的。

此外,您直接从printPerms调用main(没有对象),因此必须将其设置为静态或在Anagram类对象上调用它们。

创建对象时缺少new关键字:

Anagrams(phrase1);   
printPerms();

new Anagrams(phrase1).printPerms();

此外,没有Anagram类构造函数需要String。你所拥有的是一个名为Anagram的方法,因为你已经指定了返回类型。

public void Anagrams(String phrase1) {

删除void