2012-04-24 2 views
0

클래스에 대한 과제를 수행하려고하지만 해결책을 찾지 못하는 문제가 발생했습니다. 내가 passwd라는 주요 메소드에 변수가 있습니다. 나는 사용자가 가능한 암호를 입력하도록하고 그 입력은 변수에 저장됩니다. 그런 다음 길이 요구 사항을 충족하는지 확인하기 위해 암호 변수의 길이를 확인합니다. 그런 다음 다른 메소드 채팅에서 변수의 각 문자가 숫자인지 확인합니다.다른 메소드의 main 메소드에서 (사용자 입력의) 변수를 어떻게 사용합니까?

문제는 내 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

Erm ... 변수로 전달 하시겠습니까? – Corbin

+0

당신의 메쏘드 **는 ** 매개 변수, 즉'arguments'를 가질 수 있습니다 ** – JoseK

+0

당신은'digitCheck (passwd);와 같은 매개 변수로 그것을 전달하지 않으시겠습니까? – sp00m

답변

0

다른 범위 내의 변수를 선언했기 때문에 문제가 발생했습니다.

하나 : 당신은 두 가지 옵션이

  • 는 글로벌 변수에 변수를 이동

    을, 당신은 대개 클래스 decleration 아래 방법 이외의 변수를 선언하여이 작업을 수행, 귀하의 경우에는이 될 수있다 private static Component frame; 바로 위 또는 아래에 있습니다. digitCheck(passwd)을 : 당신이 그렇게 같이 호출 다음 digitCheck(String passwd)digitCheck() 방법을 변경해야하므로

  • , 다른 메서드에 매개 변수로 변수를 전달합니다.

첫 번째 옵션을 사용하면 내가 속해있는 수업의 어느 섹션에서든지 변수에 액세스 할 수 있습니다. 반면에 두 번째 옵션을 사용하면 전역 변수 사용에 의존하지 않고 메서드가 자체 포함되므로 메서드를 쉽게 다시 사용할 수 있습니다.

+0

도움을 주셔서 대단히 감사합니다. 이 솔루션은 성공적이었습니다. –

+0

@CurtSizemore : 천만에요. – npinti

5

가장 간단한 방법은 digitCheck()에 인수로 passwd을 전달하는 것입니다 :

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

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

leng 그 중 하나가 액세스 할 수 없습니다. passwd.lenth()을 호출하여 문자열의 길이를 알 수 있으므로 별도의 인수로 leng을 전달할 필요가 없습니다.

0

digitCheck() 메서드가 passwd 변수를 알지 못하기 때문입니다.

passwd 변수는 main() 메서드의 범위 내에서 선언됩니다.

passwd 변수를 digitCheck() 메서드에 전달하거나 클래스의 정적 멤버로 설정하여 digitCheck()에서 액세스 할 수있게합니다.

관련 문제