【问题标题】:JAVA- How to reinitialise the second statement in a for loopJAVA-如何重新初始化for循环中的第二条语句
【发布时间】:2021-07-12 23:44:43
【问题描述】:

我的代码接受用户输入并检查某些字符。如果发现不需要的字符,程序会再次要求用户输入,但是如果我要在文本末尾键入特殊字符,例如“hello@”,然后当我再次要求输入时,我会键入“hello”,我得到一个“字符串索引超出范围:5”错误。我怎样才能重新初始化 max 变量,以便当输入长度改变时,for 循环中的 max 变量也会改变。 我尝试再次分配 max 变量,但没有运气。

Scanner keyboard= new Scanner(System.in);
        System.out.println("Please enter text to encrypt:");
        String input = keyboard.nextLine();
        String text = input.toUpperCase();
        char letter;
        int max = text.length();
        for(int i =0; i<max;i++){
           letter = text.charAt(i);
          while(letter=='@'||letter=='\''||letter==';'||letter==':'||letter==','||letter=='<'||letter=='.'||letter=='>'||letter=='/'||letter=='?'||letter=='#'||letter=='~'||letter=='['||letter==']'||letter=='{'||letter=='}'||letter=='='||letter=='+'||letter=='-'||letter=='_'||letter==')'||letter=='('||letter=='*'||letter=='&'||letter=='^'||letter=='%'||letter=='$'||letter=='$'||letter=='£'||letter=='"'||letter=='!'||letter=='`'||letter=='¬'||letter=='\\'||letter=='|'){
            System.out.println("Invalid Input\nPlease enter text to encrypt:");
            input = keyboard.nextLine();
            text = input.toUpperCase();
              letter = text.charAt(i);
              i=-1;
          }
          max=text.length();
        }

【问题讨论】:

    标签: java for-loop conditional-statements


    【解决方案1】:

    您应该接受用户输入并验证它。如果输入无效,则再次请求。这样做的一种方法是:

    Scanner keyboard = new Scanner(System.in);
    boolean ok;
    
    do {
    
        ok = true;
        System.out.println( "Please enter text to encrypt:" );
        String text = keyboard.nextLine().toUpperCase();
        
        for ( char letter : text.toCharArray() ) {
            if ( letter=='@' || letter=='\'' || letter==';' || letter==':' || 
                 letter==',' || letter=='<' || letter=='.' || letter=='>' ||
                 letter=='/' || letter=='?' || letter=='#' || letter=='~' || 
                 letter=='[' || letter==']' || letter=='{' || letter=='}' || 
                 letter=='=' || letter=='+' || letter=='-' || letter=='_' ||
                 letter==')' || letter=='(' || letter=='*' || letter=='&' ||
                 letter=='^' || letter=='%' || letter=='$' || letter=='$' ||
                 letter=='£' || letter=='"' || letter=='!' || letter=='`' ||
                 letter=='¬' || letter=='\\' || letter=='|' ) {
                ok = false;
                break;
            }
        }
        
        if ( !ok ) {
            System.out.println("Invalid Input");
        }
        
    } while ( !ok );
    

    我假设您想要一个只有字母数字字符的字符串。如果是真的,那就简单多了:

    Scanner keyboard = new Scanner(System.in);
    boolean ok;
    
    do {
    
        System.out.println( "Please enter text to encrypt:" );
        String text = keyboard.nextLine().toUpperCase();
        
        // does text contains only characters from A to Z and/or 0 to 9,
        // one or more times (+)
        ok = text.matches( "[A-Z0-9]+" );
        
        if ( !ok ) {
            System.out.println("Invalid Input");
        }
        
    } while ( !ok );
    

    【讨论】:

    • 谢谢你帮了大忙!
    【解决方案2】:

    看来您只需要合法的alphaNumeric 字词。 \\w+ 匹配那些所以试试这个。

    
    Scanner keyboard = new Scanner(System.in);
    while(true) {
        System.out.println("Please enter text to encrypt:");
        String input = keyboard.nextLine();
        if (input.matches("\\w+")) {
            break;
        }
        System.out.println("Invalid input");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2020-09-09
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多