Java 在字谜中找到重复的字母
我正在写一个程序,非常类似于节目倒计时。有一堆字母,你可以用它们来造单词 我已经完成了基础工作,用户提交的单词与基本单词对照检查,如果字符匹配,则与在线API字典对照检查。然后将分数添加到前10名排行榜中。我已经实现了所有这些,但我现在面临着我的最后一个问题,我似乎无法解决Java 在字谜中找到重复的字母,java,string,Java,String,我正在写一个程序,非常类似于节目倒计时。有一堆字母,你可以用它们来造单词 我已经完成了基础工作,用户提交的单词与基本单词对照检查,如果字符匹配,则与在线API字典对照检查。然后将分数添加到前10名排行榜中。我已经实现了所有这些,但我现在面临着我的最后一个问题,我似乎无法解决 // convert the users guess to a char array char [] chars = word.toCharArray(); for(char c : chars){ int cha
// convert the users guess to a char array
char [] chars = word.toCharArray();
for(char c : chars){
int charIndex = baseWord.indexOf(c);
if(charIndex != -1){
continue;
} else {
System.out.println("The letter " + c + " is not in " + baseWord);
return false;
}
}
我将用户猜测转换为字符数组,然后将字符数组的每个元素与基字的元素进行比较。在我有重复记录之前,这一切正常。例如,如果我将基字设置为areallylongword
,而用户猜测设置为adder
,则返回true,而应返回false
我理解这样一个概念,即在查找chard
时,int charIndex=baseWord.indexOf(c)
将返回相同的值
如何避免此问题?一旦匹配,就可以从基字中删除字母一旦匹配,就可以从基字中删除字母只要在找到匹配项时将
基字中的字母清空即可:
// convert the users guess to a char array
char [] chars = word.toCharArray();
for(char c : chars){
int charIndex = baseWord.indexOf(c);
if(charIndex != -1){
char[] baseWordChars = baseWord.toCharArray();
baseWordChars[charIndex] = '#'; // char wiped
baseWord = new String(baseWordChars);
continue;
} else {
System.out.println("The letter " + c + " is not in " + baseWord);
return 0;
}
}
找到匹配项后,只需将基字中的字母留空即可:
// convert the users guess to a char array
char [] chars = word.toCharArray();
for(char c : chars){
int charIndex = baseWord.indexOf(c);
if(charIndex != -1){
char[] baseWordChars = baseWord.toCharArray();
baseWordChars[charIndex] = '#'; // char wiped
baseWord = new String(baseWordChars);
continue;
} else {
System.out.println("The letter " + c + " is not in " + baseWord);
return 0;
}
}
将出现的字符计数到数组或哈希中,然后减少猜测单词的计数
例如,如果假设基字应包含字母ASCI-128,则可以创建一个位置为128的数组,并使用字符码作为字母的索引
char [] chars = word.toCharArray();
int[] charCount = int[128]; // By default every position is 0
for (c : chars) {
charCount[c] += 1; // Increments the count of char
}
然后检查用户的猜测词,并从这个charCount中减少,以验证用户是否猜对了,charCount上永远不应该有负数
char[] c = guess.toCharArray();
for (c : chars) {
charCount[c] -= 1;
if (charCount[c] < 0) {
return 0;
}
}
char[]c=guess.toCharArray();
对于(c:字符){
字符数[c]-=1;
if(字符数[c]<0){
返回0;
}
}
将出现的字符计数到数组或散列中,然后减少猜测单词的计数
例如,如果假设基字应包含字母ASCI-128,则可以创建一个位置为128的数组,并使用字符码作为字母的索引
char [] chars = word.toCharArray();
int[] charCount = int[128]; // By default every position is 0
for (c : chars) {
charCount[c] += 1; // Increments the count of char
}
然后检查用户的猜测词,并从这个charCount中减少,以验证用户是否猜对了,charCount上永远不应该有负数
char[] c = guess.toCharArray();
for (c : chars) {
charCount[c] -= 1;
if (charCount[c] < 0) {
return 0;
}
}
char[]c=guess.toCharArray();
对于(c:字符){
字符数[c]-=1;
if(字符数[c]<0){
返回0;
}
}
我不看这个节目,所以我不太明白你的意思,游戏是用户有一堆字母,应该从中提取一个单词??那么基本单词是什么?是的,准确地说,基本单词设置为areallylongword
,其他单词必须从中提取出来。程序中的一个单词是adder
,这应该是错误的,因为基字中只有1个D,但它是传递给mei的。不要看节目,所以我不太明白你的意思。游戏是用户有一堆字母,应该从中提取一个单词??那么基字是什么呢?是的,所以基字被设置为arealllylongword
和其他单词必须由其组成。程序中的一个字是加法器
,它应该是假的,因为基字中只有1个D,但它通过了,因为我尝试了,但我有一个6个字的测试来运行,它失败了,因为所有匹配的字符现在都是#
,只需复制基字并执行匹配和在该副本中擦除我尝试过,但我有一个针对基本单词的6个单词的测试,它失败了,因为所有匹配的字符现在都是
,只需复制基本单词并在该副本中执行匹配和擦除