【问题标题】:A Program that Checks Consecutive Letters - Java一个检查连续字母的程序 - Java
【发布时间】:2016-12-12 16:19:33
【问题描述】:

我正在寻求帮助以解决我的问题。在学习了大量 C++ 之后,我们才开始在我们的课程中学习简单的 java。

我们的奖励任务之一是为那些比课堂上所教的代码更了解代码的人提供的。

任务如下: 编写一个名为 lettersSeries 的函数,用于获取用户输入的字母(一次一个字母,假设所有字母都是小写)。一旦用户连续输入了 3 个字母,该函数将停止接受用户的字母。 (只有for循环可以不用while循环)

示例:a -> b -> a -> c -> d -> e(这里是停止)

目前我知道的不多,如果有人能帮助我,我会很高兴...我尝试了一些选项,但我不知道如何追踪字母表,尤其是如何检查字母是否连续...

谢谢!

public static void letterSeries() {
    //We create a scanner for the input
    Scanner letters = new Scanner(System.in);
    for(Here I need the for loop to continue the letters input) {
      //Here I need to know if to use a String or a Char...
      String/Char letter = next.<//Char or String>();
      if(Here should be the if statement to check if letters are consecutive) {
          /*
              Here should be
              the rest of the code
              I need help with
          */

显然,您可以更改代码,而不是制作我的模式,我会更喜欢更简单的方法!

【问题讨论】:

  • 尝试编写一些代码。做一个谷歌搜索。当你被卡住时。告诉我们具体问题,我们将很乐意为您提供帮助。
  • 提示:要跟踪连续的字母,保存之前的字母,如果距离为 1,则用当前检查。当距离为 1 时,增加一个 var,如果不是,将 var 重置为 0。当 var 为 3 , 停止。多花点力气(代码),有问题再回来。
  • 如果您知道如何使用while 循环来解决它,那么将其转换为for 循环就很容易了。循环while (&lt;cond&gt;) { ... } 可以像for 循环一样容易地编写为空的初始化和增量部分:for (; &lt;cond&gt;;) { ... }。也许不是本着任务的精神,但它遵守法律条文。 :)
  • 我不知道如何检查字母是否连续......
  • 如果newLetter - currentLetter == 1,字母是连续的。在应用此测试之前,您可能需要先处理案例更改。

标签: java string alphabetical


【解决方案1】:

这就是我解决问题的方法,不过我会让你用这个来填补空白,所以我不会为你做所有的功课。

private void letterSeries() {
    Scanner scanner = new Scanner(System.in);
    char prevChar;
    char currChar;
    int amountOfConsecutives = 0;
    final int AMOUNT_OF_CONSECUTIVES = 2;

    for(;;) {
        // Take in the users input and store it in currChar
        // Check if (prev + 1) == currChar
            // If true, amountOfConsecutives++
            // If false, amountOfConsecutives = 0;
        // If amountOfConsecutives == AMOUNT_OF_CONSECUTIVES
            // Break out of the loop
    }
}

【讨论】:

  • 谢谢伙计,正是我所需要的。虽然我们可以简单地使用减法来代替检查 currChar - prevChar = 1 吗?
  • 这适用于所有情况,除非用户输入z 后跟a。提示:查看 ASCII 表以了解失败的原因。
  • 我认为您可能想要prevChar + 1 == curChar 而不是相反。你当然不需要% 26 部分。
  • 好的,我试试ASCII图表法。
  • 糟糕,@TedHopp 是对的。您无需查看字符的 ASCII 值。更新了解决此问题的答案。
【解决方案2】:

您可以使用 chars 的 Unicode 编号来检查字母是否连续:如果 a 和 b 是您的字母,请尝试检查 b - a == 1。如果以不区分大小写的方式('B'连续到'a')然后检查:(b - a == 1 || b - a == 33)。

【讨论】:

  • 在 Java 中,这将是它们的 Unicode 值,而不是它们的 ASCII 码,但它相当于。
  • 那么我还可以在java中使用这个方法吗?如果我用这种类型的检查写一个 if 语句,它会起作用吗?
  • 试试吧,让我们知道。使用 chars 作为 var 的原始类型。
  • 不要使用 33,而是在所有字母上使用 Character.toLowerCase。 (或String.toLowerCase,如果将字符读取为字符串。)
  • 对不起,忘了说,现在更新了...我们假设输入的所有字母都是小写的,所以大小写无关...
【解决方案3】:
Scanner letters = new Scanner(System.in);
char previousChar = '\0';
int consecutive = 1;
for(; consecutive != 3 ;){
    char userInput= letters.findWithinHorizon(".", 0).charAt(0);
    if (userInput - previousChar == 1){
        consecutive++;
    } else {
        consecutive = 1;
    }
    previousChar = userInput;
}

我对这个解决方案有点作弊。我使用了一个只有中间部分的 for 循环,所以它就像一个 while 循环。

不管怎样,这就是它的工作原理。

前三行创建一个用于用户输入的扫描器,一个用于计算用户连续输入的字母数量的consecutive 变量,以及一个用于存储前一个字符的previousChar

“为什么consecutive 从 1 开始?”你可能会问。好吧,如果用户输入一个字母,它将与自身连续。

在for循环中,只要consecutive != 3,代码就会运行。循环的第一行我们使用findWithinHorizon(".", 0).charAt(0) 读取一个字符。然后 if 语句检查它是否是与前一个字符的连续字母。如果是,将consecutive 添加一,如果不是,将consecutive 重置为一。最后,我们将previousChar 设置为userInput,为下一次迭代做准备。

【讨论】:

    【解决方案4】:
    private void letterSeries() {        
        Scanner letters = new Scanner(System.in);
        String last = "";
        int counter = 0;
        for (;counter < 2;){
            if ( last.equals (last=letters.next())) counter ++;
            else counter = 0
        }
    }
    

    【讨论】:

    • 字母不连续时需要重新设置计数器。此外,终止测试应为counter &lt; 3。这也需要用分隔符分隔字母,这可能是 OP 需要的,也可能不是。
    • 那么我不能打破循环吗?
    • @TedHopp Ups,我忘了重置计数器。终止条件正确,不信试试看
    • 终止条件是对的;这是我的一个栅栏错误。但是,您仍然需要使用for 而不是while。它甚至不能按原样编译,OP 不能使用 while
    • 麻烦,我修的时候搞砸了……我还是回家吧
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 2020-04-08
    • 2023-04-10
    • 2016-09-02
    • 2014-07-20
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多