Java Anagram - 简单挑战
Java Anagram - Simple Challenge
你好 Stack Overflow 社区。我开发了一个简单的 Java 程序来检测用户输入的单词是否是 Anagram。我没有收到基于布尔值的预期输出。任何想法或建议表示赞赏。
注意:此代码不包含任何方法或 class 函数,这会使该解决方案变得相当简单。请使用以下代码。谢谢!
import javax.swing.*;
public class Anagram
{
public static String word = " ";
public static boolean match = false;
public static void main(String[] args)
{
//Prompt the User for a Word
word = JOptionPane.showInputDialog("Please Enter A Word");
//Break the Word into an Array
String[] anagram = new String[word.length()];
for(int i = 0; i < word.length(); i++)
{
anagram[i] = Character.toString(word.charAt(i));
JOptionPane.showMessageDialog(null, anagram[i]);
}
//Create a duplicate Array
String[] anagram2 = new String[word.length()];
for(int i = word.length() - 1; i >= 0; i--)
{
anagram2[i] = anagram[i];
JOptionPane.showMessageDialog(null, anagram2[i]);
}
//Do a search on each letter
for (int i = 0; i < anagram.length && i < anagram2.length; i++)
{
if(anagram.length == anagram2.length)
{
if(anagram[i].toLowerCase() == anagram2[i].toLowerCase())
{
match = true;
}
else
{
match = false;
}
}
else
{
JOptionPane.showMessageDialog(null, "There is a mismatch");
match = false;
}
}
//Prompt the user with the result
if(match == true)
{
JOptionPane.showMessageDialog(null, "Your Word is a Anagram!");
}
else if(match == false)
{
JOptionPane.showMessageDialog(null, "Your Word is NOT a Anagram!");
}
}
}
假设你的意思是回文:
您的代码实际上并没有反转字符串。
for(int i = word.length() - 1; i >= 0; i--) {
anagram2[i] = anagram[i];
JOptionPane.showMessageDialog(null, anagram2[i]);
}
这会将 anagram 复制到 anagram2 而不会反转它 - 它确实从后到前经过它,但结果是相同的。
你需要做类似的事情
for (int i = 0; i < word.length(); i++) {
anagram2[word.length() - i - 1] = anagram[i];
}
但是,确实没有必要首先创建 anagram 和 anagram2 数组,您只需使用 charAt 遍历 String 的数据本身即可。
boolean match = true;
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) != word.charAt(word.length() - i - 1)) {
match = false;
break;
}
}
旁注,您不应该将 word
和 match
声明为静态变量,将它们保留在 main()
中就可以了。
你好 Stack Overflow 社区。我开发了一个简单的 Java 程序来检测用户输入的单词是否是 Anagram。我没有收到基于布尔值的预期输出。任何想法或建议表示赞赏。
注意:此代码不包含任何方法或 class 函数,这会使该解决方案变得相当简单。请使用以下代码。谢谢!
import javax.swing.*;
public class Anagram
{
public static String word = " ";
public static boolean match = false;
public static void main(String[] args)
{
//Prompt the User for a Word
word = JOptionPane.showInputDialog("Please Enter A Word");
//Break the Word into an Array
String[] anagram = new String[word.length()];
for(int i = 0; i < word.length(); i++)
{
anagram[i] = Character.toString(word.charAt(i));
JOptionPane.showMessageDialog(null, anagram[i]);
}
//Create a duplicate Array
String[] anagram2 = new String[word.length()];
for(int i = word.length() - 1; i >= 0; i--)
{
anagram2[i] = anagram[i];
JOptionPane.showMessageDialog(null, anagram2[i]);
}
//Do a search on each letter
for (int i = 0; i < anagram.length && i < anagram2.length; i++)
{
if(anagram.length == anagram2.length)
{
if(anagram[i].toLowerCase() == anagram2[i].toLowerCase())
{
match = true;
}
else
{
match = false;
}
}
else
{
JOptionPane.showMessageDialog(null, "There is a mismatch");
match = false;
}
}
//Prompt the user with the result
if(match == true)
{
JOptionPane.showMessageDialog(null, "Your Word is a Anagram!");
}
else if(match == false)
{
JOptionPane.showMessageDialog(null, "Your Word is NOT a Anagram!");
}
}
}
假设你的意思是回文:
您的代码实际上并没有反转字符串。
for(int i = word.length() - 1; i >= 0; i--) {
anagram2[i] = anagram[i];
JOptionPane.showMessageDialog(null, anagram2[i]);
}
这会将 anagram 复制到 anagram2 而不会反转它 - 它确实从后到前经过它,但结果是相同的。
你需要做类似的事情
for (int i = 0; i < word.length(); i++) {
anagram2[word.length() - i - 1] = anagram[i];
}
但是,确实没有必要首先创建 anagram 和 anagram2 数组,您只需使用 charAt 遍历 String 的数据本身即可。
boolean match = true;
for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) != word.charAt(word.length() - i - 1)) {
match = false;
break;
}
}
旁注,您不应该将 word
和 match
声明为静态变量,将它们保留在 main()
中就可以了。