我正在尝试为课程做作业,但我遇到了一个我无法找到解决方案的问题。我的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++;
}
}
}
答案 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()可以访问它。