0

我正在尝试为课堂做作业,但我遇到了一个我找不到解决方案的问题。我的主要方法中有一个名为 passwd 的变量。我让用户输入可能的密码,并且该输入存储在变量中。然后我检查密码变量的长度以确保它符合长度要求。然后我想用另一种方法 chat 检查变量的每个字符以查看它是否是数字。

问题是我无法在 digitCheck() 方法中使用 main 方法中的 passwd 变量。

有人可以告诉我如何解决这个问题。

 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

您的问题是因为您在不同的范围内声明变量。你有两个选择:

任何一个:

  • 将您的变量移动到全局变量,您可以通过在方法外部声明变量来执行此操作,通常在类声明下,在您的情况下,这可能只是 above 或 below private static Component frame;

  • 将您的变量作为参数传递给另一个方法,因此您需要将digitCheck()方法更改为digitCheck(String passwd),然后像这样调用它digitCheck(passwd)

第一个选项将允许您从您所在班级的任何部分访问变量。另一方面,第二个选项将允许您更轻松地重用您创建的方法,因为该方法将是自包含的,而不依赖于全局变量的使用。

于 2012-04-24T08:49:25.867 回答
0

这是因为 digitCheck() 方法不知道 passwd 变量。

passwd 变量在 main() 方法的范围内声明。

要么将 passwd 变量传递给 digitCheck() 方法,要么将其设为类的静态成员,以便 digitCheck() 可以访问它。

于 2012-04-24T08:51:35.120 回答