当提供两个输入短语时,它应该检查一个单词的字母是否都在另一个单词中找到,而不管大写。例如,猫和猫都可以工作,就像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");
}}}
答案 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)
此代码无效,因为如果您有cat
和caate
?
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是一种文字游戏,是重新排列的结果 使用全部来生成新单词或短语的单词或短语的字母 原始字母恰好一次;例如乐团可以 重新安排到了马车。