如何在其他方法中使用main方法的变量(用户输入)?

时间:2012-04-24 08:46:01

标签: java variables methods

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

问题是我无法在我的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++;
    }

}

}

3 个答案:

答案 0 :(得分: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作为单独的参数传递。

答案 1 :(得分:0)

您的案例中的问题是因为您在不同范围内声明变量。您有两种选择:

或者:

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

  • 将您的变量作为参数传递给其他方法,因此您需要将digitCheck()方法更改为digitCheck(String passwd),然后将其调用为:digitCheck(passwd)。< / p>

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

答案 2 :(得分:0)

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

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

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