当前位置: 代码迷 >> java >> Java:如果用户输入不是单个字母小写字母,如何将用户返回主菜单?
  详细解决方案

Java:如果用户输入不是单个字母小写字母,如何将用户返回主菜单?

热度:7   发布时间:2023-07-31 11:10:48.0

我正在尝试运行一个允许用户同时输入char keyCharacter和String theString的程序。 然后,使用这些输入,我将屏蔽keyCharacter,如果它出现在带有“$”的字符串中,从theString中删除keyCharacter,最后计算keyCharacter在字符串中出现的次数。

每个方法都正常工作,除了方法getKeyCharacter,用户必须输入一个char:用户只能输入一个字母(例如q或z)。

如果用户输入除单个字母以外的任何内容(可以是单词,短语,句子,特殊字符,如#或$,空格或制表符,或只需按Enter键),则程序会将用户返回到原始字母从用户那里请求keyCharacter的问题。 这应该继续循环回到原始问题,直到用户输入有效输入。

由于我还是Java的初学者,循环是我目前的弱点,这部分给我带来了很多麻烦。 我知道我应该使用while循环,这是嵌套循环背后的逻辑真的令我感到困惑。

从搜索可能的解决方案,我知道有一些叫做正则表达式和try-catch异常的东西可以帮助解决我的问题,但是由于我们没有在课堂上明确地解决这个问题,所以我现在不想处理这个问题。 。 谢谢。

这是我的代码粘贴:

import java.util.*;

public class Foothill {

    // main method
    public static void main (String[] args) {
        char keyCharacter = getKeyCharacter();
        String theString = getString();    
        maskCharacter(theString, keyCharacter);
        countKey(theString, keyCharacter);
        removeCharacter(theString, keyCharacter);
    }

    // get keyCharacter
    public static char getKeyCharacter() {
        Scanner inputStream = new Scanner(System.in);
        boolean stop = false;
        String firstPrompt, strKeyCharacter;
        char keyCharacter = ' ';

        while (stop != true) {
            firstPrompt = "Please enter a SINGLE character to act as key: ";
            System.out.print(firstPrompt);
            strKeyCharacter = inputStream.nextLine(); 

            while (strKeyCharacter.length() != 1) {
                firstPrompt = "Please enter a SINGLE character to act as key: ";
                System.out.print(firstPrompt);
                strKeyCharacter = inputStream.nextLine();
            }

            keyCharacter = strKeyCharacter.charAt(0);

            while (strKeyCharacter.length() == 1) {
                firstPrompt = "Please enter a SINGLE character to act as key: ";
                System.out.print(firstPrompt);
                strKeyCharacter = inputStream.nextLine();
                if (keyCharacter == 'a' || keyCharacter == 'b' || keyCharacter == 'c' || keyCharacter == 'd' 
                  || keyCharacter == 'e' || keyCharacter == 'f' || keyCharacter == 'g' || keyCharacter == 'h'
                  || keyCharacter == 'i' || keyCharacter == 'j' || keyCharacter == 'k' || keyCharacter == 'l'
                  || keyCharacter == 'm' || keyCharacter == 'n' || keyCharacter == 'o' || keyCharacter == 'p'
                  || keyCharacter == 'q' || keyCharacter == 'r' || keyCharacter == 's' || keyCharacter == 't'
                  || keyCharacter == 'u' || keyCharacter == 'v' || keyCharacter == 'w' || keyCharacter == 'x'
                  || keyCharacter == 'y' || keyCharacter == 'z') {
                    System.out.println("You entered: " + keyCharacter + '\n');
                    stop = true;
                } else {
                    break;
                }
            }
        }
        return keyCharacter;
    }

    // declare final = 4 to be constant
    public static final int minimumLength = 4;

    // get theString
    public static String getString() {
        Scanner inputStream = new Scanner(System.in);
        String secondPrompt, theString;
        do {
            secondPrompt = "Please enter a phrase or sentence >= 4: ";
            System.out.print(secondPrompt);
            theString = inputStream.nextLine();
            System.out.print('\n');
        } while (theString.length() < minimumLength || theString == null || theString.length() == 0);
        inputStream.close();
        return theString;
    }

    // mask keyCharacter with $
    public static String maskCharacter(String theString, char keyCharacter) {
        theString = theString.replace(keyCharacter, '$');
        System.out.println("String with " + " '" + keyCharacter + "' " + " masked.");
        System.out.println(theString + '\n');
        return theString;
    }

    // count number of times keyCharacter occurs in theString
    public static void countKey(String theString, char keyCharacter) {
        int countChar = 0;
        for (int charTimes = 0; charTimes < theString.length(); charTimes++) {
            if (theString.charAt(charTimes) == keyCharacter) {
                countChar++;
            }
        }
        System.out.println( "The key character occurs " + countChar + " times. \n");
        return;
    }

    // remove keyCharacter from theString
    public static void removeCharacter(String theString, char keyCharacter) {
        theString = theString.replace(String.valueOf(keyCharacter), "");
        System.out.println("String with " + "'" + keyCharacter + "' removed: ");
        System.out.println(theString);
        return;
    }
}

这是我的运行粘贴(你可以看到,在我的程序中有一些严肃的调试):

Please enter a SINGLE character to act as key: f
Please enter a SINGLE character to act as key: f
You entered: f

Please enter a SINGLE character to act as key: f
You entered: f

Please enter a SINGLE character to act as key: f
You entered: f

Please enter a SINGLE character to act as key: f
You entered: f

Please enter a SINGLE character to act as key: 

// which then continues so on so forth...
public static char getKeyCharacter(){

    Scanner inputStream = new Scanner(System.in);
    boolean stop = false;
    String firstPrompt, strKeyCharacter;
    char keyCharacter = ' ';

    while(!stop){

        firstPrompt = "Please enter a SINGLE character to act as key: ";
        System.out.println(firstPrompt);
        strKeyCharacter = inputStream.nextLine();

        //check if the input contains only 1 character
        boolean isSingleChar = (strKeyCharacter.length() == 1);
        //check if the input character is within the ASCII code of 97 (a) to 122 (z)
        boolean isValidChar = 
                strKeyCharacter.charAt(0) >= 97 &&
                strKeyCharacter.charAt(0) <= 122;

        if(isSingleChar && isValidChar){
            keyCharacter = strKeyCharacter.charAt(0);
            stop = true;
        }


    }

    return keyCharacter;
}
  相关解决方案