上述问题似乎含糊不清,但实际上这是一个非常简单的想法,我似乎无法弄明白。
它基本上是一个包含A到F字母的4位数字母代码,例如:ABDF
,BAAF
,DBAF
等。
现在我正在尝试进行一些后输入处理,因为它必须无法输入代码中已有的字母,因为它必须是一个唯一的4位数代码而没有重复的字母。我一直试图让它工作,但我的代码似乎都没有工作,所以我要回头向你们寻求帮助:)
我希望这有点清楚,否则我很乐意清理它。 提前谢谢。
答案 0 :(得分:2)
有点伪代码但它会起作用。
String uniquePass="";
while(uniquePass.length<4){
String userInput=getUserInputChar()
if(uniquePass.contains(userInput))
rejectInputAndNotifyUser
else
uniquePass=uniquePass+userInput
}
答案 1 :(得分:1)
public static boolean hasDuplicateChars(String string) {
Set<Character> chars = new HashSet<Character>();
for (char c : string.toCharArray()) {
if (!chars.add(c)) return false;
}
return true;
}
Set是一个不包含重复元素的集合。我们将使用add方法,如果该集合尚未包含指定的元素,则返回true。
hasDuplicateChars
函数使用toCharArray函数和for循环遍历输入字符串中的字符;每个字符都会添加到最初为空的chars
集中。如果add
方法返回false,则表示我们之前已经遇到过相同的字符。所以我们从函数中返回false。
否则输入有效,方法返回true。
答案 2 :(得分:0)
使用此功能,您将能够查看字符串是否包含唯一字符
public static boolean checkForUnique(String str){
boolean containsUnique = false;
for(char c : str.toCharArray()){
if(str.indexOf(c) == str.lastIndexOf(c)){
containsUnique = true;
} else {
containsUnique = false;
}
}
return containsUnique;
}
更新
每次用户输入一个角色时都会运行,如果失败,则表示存在重复。您可以选择丢弃该输入或显示错误。
答案 3 :(得分:0)
如果你要验证完整的输入,你可以依靠设定的语义和一些技巧
String s = "ABAF";
int count = new HashSet<>(Arrays.asList(s.split(""))).size();
if (count - 1 == 4) {
System.out.println("All ok");
} else {
System.out.println("Repeated letters");
}
split("")
会将字符串拆分为类似{"","A", "B", "A", "F"}
的数组。
new HashSet<>(Arrays.asList(s.split("")))
将创建一个带有字符串元素的Set,并且当Set将弹回已经包含的元素时,该集合的大小例如为&#34; AAAF&#34;将是3(它包含&#34;&#34;,&#34; A&#34;&#34; F&#34;)。这样,您可以使用集合的大小来确定字符串的所有字母是否都是唯一的
如果它在键入你的时候比解决方案取决于输入法,但你可以有类似的东西(伪东西)
if (pass.contains(letter)) {
breakAndNotifyUser();
} else {
pass+=letter;
}