当前位置: 首页 > 知识库问答 >
问题:

逻辑错误导致语句在While循环中打印两次

郭永安
2023-03-14

因此,我当前遇到的问题是,在我完成所有步骤后,“Enter your command(reverse,replace first,replace last,remove all,remove)”语句被打印了两次。

我相信正在发生的是循环执行了两次,但我不知道为什么。如果能帮助解决这个问题,我们将不胜感激。抱歉,如果我的代码格式不好,还在学习如何正确的格式。

import java.util.Scanner;

public class StringChangerenter {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        // Output Variables
        String userInput = "";

        // Variables
        String removeChar = "", removeAllChar = "";
        int removeIndex = 0;

        // First Output
        System.out.println("Enter the string to be manipulated");
        userInput = keyboard.nextLine();
        String command = "";

        // While loop
        while (!command.equalsIgnoreCase("quit")) {
            // Output
            System.out.println("Enter your command (reverse, replace first, replace last, remove all, remove)");
            command = keyboard.nextLine();
            if (command.equalsIgnoreCase("remove")) {
                System.out.println("Enter the character to remove");
                removeChar = keyboard.nextLine();
                int totalCount = 0;
                for (int j = 0; j < userInput.length(); j++) {
                    if (userInput.charAt(j) == removeChar.charAt(0)) {
                        totalCount = totalCount + 1;
                    }
                }
                System.out.println("Enter the " + removeChar
                        + " you would like to remove (Not the index - 1 = 1st, 2 = 2nd, etc.):");
                removeIndex = keyboard.nextInt();
                int currentIndex = 1;
                if (removeIndex <= totalCount) {
                    for (int i = 0; i < userInput.length(); i++) {
                        if (userInput.charAt(i) == removeChar.charAt(0)) {
                            if (currentIndex == removeIndex) {
                                String firstpartOfString = userInput.substring(0, i);
                                String secondpartOfString = userInput.substring(i + 1, userInput.length());
                                System.out.println("The new sentence is " + firstpartOfString + secondpartOfString);
                                userInput = firstpartOfString + secondpartOfString;
                                break;
                            } else {
                                currentIndex = currentIndex + 1;
                            }
                        }
                    }
                } else {
                    System.out.println("Can't find " + removeChar + " occuring at " + removeIndex + " int the string.");
                }
                // Remove All Code

            } else if (command.equalsIgnoreCase("remove all")) {
                System.out.println("Enter the character to remove");
                removeAllChar = keyboard.next();
                String newString = "";
                for (int i = 0; i < userInput.length(); i++) {
                    if (userInput.charAt(i) != removeAllChar.charAt(0)) {
                        newString = newString + userInput.charAt(i);
                    }
                }
                userInput = newString;
                System.out.println("The new sentence is " + userInput);
            }
            // Bracket for while loop
        }
    }
}

共有1个答案

杜凯
2023-03-14

处理完一个字符后会得到两个条目的原因是您没有完全阅读包含该字符的行。

具体而言,在上分支中使用Keyboard.NextInt();,在下分支中使用Keyboard.Next();。当它们分别读取下一个整数和字符时,它们不处理行尾标记。

然后,当您到达循环的顶部时,您调用keyboard.nextLine(),它处理int(或字符,在remove all大小写中)之后出现的任何字符,直到行结束标记。对于预期的用户输入,这只是一个空字符串。

要解决这一问题,您需要确保在只读取整数或单个字符的情况下,您能够读取键盘。nextLine()

 类似资料:
  • 在下面的代码中,我试图提示用户输入一个数字,如果它小于1,则要求输入另一个正数。 在输入正数之前,它似乎一直在工作,但在给出正数后,程序将打印最终的错误消息。 输入正数后,如何阻止打印此错误消息?

  • 有人能帮我找出为什么Instachat:Stick\u out\u舌头\u winking\u eye:'和'Docs To Go'的代码没有返回False吗™ 免费办公套房'?它们包含Unicode大于127的字符(分别为emoji和TM),因此从技术上讲,这两个字符都应该返回False。 我不明白为什么else条款在这里不起作用。 下面应该是我的代码的预期输出:True False 然而,实际

  • 我创建了一个while循环来为我的程序创建菜单,它将一直循环,直到用户在控制台中键入“退出”。我的问题是,每当我在控制台中输入'Transfer'时,if语句都能正常运行,但当它返回到循环的开始时,

  • 标准循环 为了保持简洁,重复的任务可以用以下简写的方式: - name: add several users user: name={{ item }} state=present groups=wheel with_items: - testuser1 - testuser2 如果你在变量文件中或者 ‘vars’ 区域定义了一组YAML列表,你也可以这样做: vars

  • Python 中,while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块。 while 语句的语法格式如下: while 条件表达式:     代码块 这里的代码块,指的是缩进格式相同的多行代码,不过在循环结构中,它又称为 循环体。 while 语句执行的具体流程为:首先判断条件表达式的值,

  • 问题内容: 假设我有这个: 问题: break语句会将我带出两个循环还是仅从内部循环带出?谢谢。 问题答案: 在您的示例中,break语句将使您退出while(b)循环