【问题标题】:Java Anagram - Simple Challenge [closed]Java Anagram - 简单挑战 [关闭]
【发布时间】:2018-02-14 12:15:35
【问题描述】:

你好堆栈溢出社区。我开发了一个简单的 Java 程序来检测用户输入的单词是否是 Anagram。我没有收到基于布尔值的预期输出。任何想法或建议表示赞赏。

注意:此代码不包含任何可以使它成为一个相当简单的解决方案的方法或类函数。请使用下面的代码。谢谢!

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!");
    }
  }
}

【问题讨论】:

  • 你确定你说的不是回文吗?
  • 首先要弄清楚什么是字谜。您的长度检查是错误的:add、dad 和 dd a 是字谜,即使 dd a 的长度与 add 和 dad 的长度不同
  • 只是几个问题:您期望什么?你的输入是什么?为什么不使用方法?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用“编辑”链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!

标签: java anagram


【解决方案1】:

假设你的意思是回文:

您的代码实际上并没有反转字符串。

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 遍历字符串本身的数据。

boolean match = true;
for (int i = 0; i < word.length(); i++) {
    if (word.charAt(i) != word.charAt(word.length() - i - 1)) {
        match = false;
        break;
    }
}

旁注,您不应该将wordmatch 声明为静态变量,将它们保留在main() 中就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 2014-10-07
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多