【问题标题】:How to check if there are double letters in a 4 digit code in Java如何检查Java中的4位代码中是否有双字母
【发布时间】:2015-03-15 03:46:17
【问题描述】:

上面的问题可能看起来很模糊,但实际上是一个非常简单的想法,我似乎无法弄清楚。

它基本上是一个 4 位字母代码,包含从 A 到 F 的字母,例如:ABDFBAAFDBAF 等。

现在我正在尝试进行一些后期输入处理,其中必须无法输入已经在代码中的字母,因为它必须是唯一的 4 位代码,没有重复的字母。我一直在努力让它工作,但我的代码似乎都没有工作,所以我又从头开始向你们寻求帮助:)

我希望这有点清楚,否则我会很乐意清理它。 提前致谢。

【问题讨论】:

  • 显示您的代码,我们或许可以为您提供帮助。 SO 不是代码编写服务。
  • @chancea 我不确定我是否完全理解这一点,我基本上尝试做的是一种检查用户是否没有在某处输入带有双字母的代码的方法跨度>
  • @chancea 现在会这样做,我也一直在尝试其他解决方案:)

标签: java string input char double


【解决方案1】:

如果您要验证完整的输入,您可以依靠集合语义和一些技巧

    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&lt;&gt;(Arrays.asList(s.split(""))) 将创建一个带有 String 元素的 Set,并且由于 Set 将反弹已包含的元素,因此设置的大小例如“AAAF”将为 3(它将包含“”、“A”和“F”)。这样,您可以使用集合的大小来确定字符串的所有字母是否都是唯一的

如果它在打字时你会比解决方案取决于输入法,但你可以有类似(伪东西)的东西

if (pass.contains(letter)) {
  breakAndNotifyUser();
} else {
  pass+=letter;
}

【讨论】:

  • 我可能很笨拙,但如果我用 ABAF 运行它,我似乎无法让它工作,它会给我重复的字母,但如果我用 ABDF 做它会给我重复的字母你能不能进一步详细说明一下?
  • 我已经进一步解释了,代码应该适用于这两种情况,它的性质很简单,如果它一直令人困惑,你可以在问题中发布它
【解决方案2】:
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。

【讨论】:

  • 代码看起来像是我可以使用的东西,虽然我不明白,你能解释一下吗?
  • @Rusty 我添加了更多细节
【解决方案3】:

使用此函数,您将能够查看字符串是否包含唯一字符

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;
}

更新:

每次用户输入字符时都会运行此命令,如果失败,则表示存在重复。您可以选择放弃该输入或显示错误。

【讨论】:

  • 但是当用户键入时,您使用此功能查看输入的字符是否有效,如果不是,您不保存或输入错误。
【解决方案4】:

一种伪代码,但它可以工作。

String uniquePass="";
while(uniquePass.length<4){
    String userInput=getUserInputChar()
    if(uniquePass.contains(userInput))
      rejectInputAndNotifyUser
        else
      uniquePass=uniquePass+userInput
}

【讨论】:

  • 这是唯一真正满足 OP 的 输入处理 要求的答案,其中所有其他答案都是验证后
  • @chancea 我认为你是对的,因此我将在验证后编辑我的帖子,因为这不是我所需要的,对不起,我让你努力了跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多