我是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;等输入。
由于
答案 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
。