为什么不能获得这种回报"是"两个字是字谜?

时间:2014-04-05 18:20:48

标签: java

编辑:我现在看到伯爵没有工作。我现在更新了代码,如果count大于或等于任何一个单词,它将返回“yes”。我假设这是我需要做的唯一修复,所以谢谢你!

当提供两个输入短语时,它应该检查一个单词的字母是否都在另一个单词中找到,而不管大写。例如,猫和猫都可以工作,就像cat and catt,dogged和do等一样。我的代码适用于某些输入而不是其他输入,我无法弄清楚原因。我尝试了输入“cat”和“cat and it works but”moo“和”moo“不起作用。我也假设使用count可能是问题的一部分。我也尝试使用数组但是我认为这可能更简单。我不是在寻找答案,只是解释为什么我的代码不能打印它应该是什么。

以下是我的两个课程:

    import java.util.*;
    public class SuperAnTester{
    public static void main(String[] args){
        System.out.println("Enter two words: ");
        Scanner scan = new Scanner(System.in);
        String phraseone = scan.nextLine();
        String phrasetwo = scan.nextLine();
        SuperAnagram x = new SuperAnagram(phraseone, phrasetwo);
        x.superAn();
    }}

    public class SuperAnagram{
    private String firstWord;
    private String secondWord;

    public SuperAnagram(String first, String second){
        firstWord = first;
        secondWord = second;
    }

    public void superAn(){
        int count = 0;
        firstWord.toLowerCase();
        secondWord.toLowerCase();

        for (int n = 0; n < firstWord.length(); n++){
            for (int x = 0; x < secondWord.length(); x++){
                if (firstWord.charAt(n) == secondWord.charAt(x)){
                    count++;
                }}}

        if (count >= firstWord.length() || count >= secondWord.length()){
            System.out.println("Yes");
        } else{
            System.out.println("No");
        }}}

4 个答案:

答案 0 :(得分:3)

问题可能就在这里

    firstWord.toLowerCase();
    secondWord.toLowerCase();

将其更改为

    firstWord=firstWord.toLowerCase();
    secondWord=secondWord.toLowerCase();

String是不可变类。您必须将其分配回字符串以反映更改。

答案 1 :(得分:0)

这非常简单。

如果你举个例子&#39;做&#39;和&#39; doott&#39;为了这封信&#39; d&#39;对于字母&#39; o&count;将会增加一次(对于doott的第一个d)它将增加两次(与doott的第一个和第二个相同)。

因此,计数将等于3,并且doott长度都不等于。

您可以使用StringUtils.countMatches(yourString, yourchar);作为两个字符串,并检查第一个字符串是否小于或等于第二个字符串。

答案 2 :(得分:0)

此代码无效,因为如果您有catcaate

,该怎么办?
c == c OK count = 1
...
a == a OK count = 2
...
a == a OK count = 3
...
t == t OK count = 4

所以最后count = 4;

计数!=到3(猫)和计数!= 5(caate)

所以你必须考虑多余的字符


另一个错误是你把字符串小写但你没有保存它。所以只需分配firstWord.toLowerCase(); to firstWord和secondWord.toLowerCase(); to secondWord。

firstWord = firstWord.toLowerCase();
secondWord = secondWord.toLowerCase();

答案 3 :(得分:0)

你的例子对我来说有点困惑。我不认为狗和狗通常被认为是字谜?我认为作为字谜的先决条件是两个单词应该具有相同数量的字符。 请找一个例子(假设你只有ascii字符):

private static boolean isAnagram(String a, String b) {
    if (a == null || b == null || a.length() != b.length()) return false;

    byte charCount[] = new byte[256];

    a = a.toLowerCase();
    b = b.toLowerCase();

    for (int i = 0 ; i < a.length() ; ++i) {
        charCount[a.charAt(i)]++;
    }

    for (int i = 0; i < b.length() ; ++i) {
        int current = --charCount[b.charAt(i)];
        if (current < 0) return false;
    }

    return true;
}

基于维基百科:

  

anagram是一种文字游戏,是重新排列的结果   使用全部来生成新单词或短语的单词或短语的字母   原始字母恰好一次;例如乐团可以   重新安排到了马车。