0

このプログラムは、文字列、パスワードへの入力を受け入れることを想定しています。次に、プログラムは、パスワードの長さが8文字以上で、2桁以上で、文字と数字のみが含まれていることを確認します。私が見たところ、この方法は機能するはずですが、少なくとも2桁を数える正しい方法を取得できないようです。

これは、スレッド "main"で例外が発生するエラーです。java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です:10 at java.lang.String.charAt(String.java:658)at Password.main(Password.java:35 )。

import java.util.*;


public class Password{
    public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    String s;
    int numbers = 0;

    System.out.println("Enter a password (Must contain only letters and numbers, ");
    System.out.print("minimum of 8 characters with atleast two numbers): ");    
    s = input.nextLine();

    while(1==1){
    if (s.length() < 8){
        System.out.println("Password is too short");
        System.out.println("Enter correctly formatted password");
        s = input.nextLine();
        continue;
        }

    if (s.matches("^[a-zA-Z0-9_]+$")){  
    }
    else{
        System.out.println("Password may only contain Letters and Digits");
        System.out.println("Enter correctly formatted password");
        s = input.nextLine();
        continue;
        }



    int i;
    for (i = 0; i <= s.length(); i++){
        if (Character.isDigit(s.charAt(i))){
            numbers++;
            }
            }

    if (numbers < 2){
        System.out.println("Password must contain atleast 2 digits");
        System.out.println("Enter correctly formatted password");
        s = input.nextLine();
        continue;
        }
        break;
        }


    while (0==0){   
    System.out.println("Reenter Password to see if it matches");
        String a = input.nextLine();

    if (s.equals(a)){
        System.out.println("Password matches!");
        break;
        }
    else{
        System.out.println("Password does not match");
        continue;
    }
    }
    }
    }
4

3 に答える 3

5

iforループでは、等しいことを許可しないでくださいs.length()

for (i = 0; i <= s.length(); i++)

ArrayIndexOutOfBoundsExceptionは、にアクセスしようとすると発生しますs[s.length()]

于 2012-10-01T02:03:29.973 に答える
0

0から長さまでのインデックスを使用しているため、このステートメントは例外を取得しています。その代わりに、0から<の長さを使用します。

 for (i = 0; i <= s.length(); i++){
    if (Character.isDigit(s.charAt(i))){
        numbers++;
    }
 }
于 2012-10-01T03:05:43.750 に答える
0

for(i = 0; i <= s.length(); i ++){をfor(i = 0; i <s.length(); i ++){に置き換えます

例:文字列s="abc"としましょう。s.length()= 3. s.charAt(0)= "a"、s.charAt(1)= "b"、s.charAt(2)="c"。s.charAt(3)は存在せず、例外をスローします。

于 2013-07-10T07:21:31.937 に答える