0

クラスの課題をしようとしていますが、解決策が見つからない問題に遭遇しました。main メソッドに passwd という変数があります。ユーザーに可能なパスワードを入力してもらい、その入力が変数に保存されます。次に、パスワード変数の長さをチェックして、長さの要件を満たしていることを確認します。次に、別のメソッド chat で変数の各文字をチェックして、それが数字かどうかを確認したいと思います。

問題は、メイン メソッドの passwd 変数を digitCheck() メソッドで使用できないことです。

誰かがこの問題を解決する方法を教えてください。

 package Password;

import java.awt.Component;
import javax.swing.JOptionPane;

/**
 *
 * @author Curtis
 */
public class Password 
{
private static Component frame;

//Main Method
public static void main(String[] args) 
{//Declaration of variables
    String passwd;
    int leng;
    boolean length = false;
    //Prompt user to enter possible password
    while(!length)
    {
        passwd = JOptionPane.showInputDialog("Please enter a possible password:\n" +  
            "Password must contain 6-10 characters\n"+
            "Password must contain both a letter and a digit");
        leng =passwd.length();//Determines Password Length
        if(leng>5 && leng<11)
            { 
                length = true;
                digitCheck();
            }
        else //Gives Password Length Error Message
        {
            length = false;
            JOptionPane.showMessageDialog(frame, "Your password does not meet the length requirements.", "Password Length Error", JOptionPane.ERROR_MESSAGE); 
        }
    }
}
//Digit Check Method
public static void digitCheck();
{// declaration of variables
    char c;
    int digits = 0;
    for(int i=0;i<leng;i++)
    {
        c = passwd.charAt(i);
        if(Character.isDigit(c))
            digits++;
    }

}

}
4

3 に答える 3

5

最も簡単な方法は、次passwdのように引数として渡すことdigitCheck()です。

public static void main(String[] args) {
            ...
            length = true;
            digitCheck(passwd);
            ...
}

public static void digitCheck(String passwd) {
   // use passwd here
   ...
}

lengどちらにもアクセスできないことに注意してください。を呼び出すことで文字列の長さを知ることができるので、別の引数としてpasswd.lenth()渡す必要はありません。leng

于 2012-04-24T08:47:56.650 に答える
0

あなたの場合の問題は、異なるスコープ内で変数を宣言しているためです。次の 2 つのオプションがあります。

また:

  • 変数をグローバル変数に移動します。これを行うには、変数をメソッドの外側で、通常はクラス宣言のすぐ下で宣言します。この場合、これは のすぐ上またはすぐ下にある可能性がありますprivate static Component frame;

  • 変数をパラメーターとして他のメソッドに渡すため、digitCheck()メソッドをに変更してからdigitCheck(String passwd)、次のように呼び出す必要がありますdigitCheck(passwd)

最初のオプションでは、クラスのどのセクションからでも変数にアクセスできます。一方、2 番目のオプションでは、作成したメソッドを簡単に再利用できます。これは、グローバル変数の使用に依存せずにメソッドが自己完結型になるためです。

于 2012-04-24T08:49:25.867 に答える
0

これは、digitCheck() メソッドが passwd 変数を認識していないためです。

passwd 変数は、main() メソッドのスコープ内で宣言されます。

passwd 変数を digitCheck() メソッドに渡すか、変数をクラスの静的メンバーにして、digitCheck() からアクセスできるようにします。

于 2012-04-24T08:51:35.120 に答える