2014-11-14 5 views
7

Java로 프로그래밍 중입니다. 모든 방법에 설명을 추가하여 과제에 따라 설명해야합니다 (과제에 따라). 내가 알고있는 것을 Password.java (내가 학교에서 제공 한 javadoc을 연구 한 후에 만든 스텁)에 추가했습니다. 내 질문은 여러 함수에 관한 것이 아니라 testWord 및 setWord에 실수가 있음을 알고 있지만 직접 처리 할 것입니다. 내 질문이 줄에 관한 것입니다 : 누군가가 제공 할 수있는, 그래서 만약blank 최종 필드 INITIAL이 초기화되지 않았을 수 있습니다.

public static final java.lang.String INITIAL; 

이 줄은 학교에 의해 제공됩니다, 그래서 올바른지 생각 돼, 나는 어디 상수 필드 값의 초기에 대한 문서를 찾을 수 없습니다 (즉, 어떻게 처리 되는가, 저장되는 것은 무엇인가, 타입이 무엇인가?)에 대한 정보를 가지고있다. 또한 임 이클립스에서이 라인에 오류가 점점 : 공백 최종 필드 초기가

초기화되지 않았을 수 있습니다

왜이 오류가 여기

? 미리 감사드립니다. 참고로

Password.java의 코드 :

package ss.week1; 

public class Password extends java.lang.Object { 

// ------------------ Instance variables ---------------- 

/** 
* The standard initial password. 
*/ 

public static final java.lang.String INITIAL; 

// ------------------ Constructor ------------------------ 

/** 
* Constructs a Password with the initial word provided in INITIAL. 
*/ 

public Password() { 

} 

/** 
* Tests if a given string is an acceptable password. Not acceptable: A word 
* with less than 6 characters or a word that contains a space. 
* 
* @param suggestion 
* @return true If suggestion is acceptable 
*/ 

// ------------------ Queries -------------------------- 

public boolean acceptable(java.lang.String suggestion) { 
    if (suggestion.length() >= 6 && !suggestion.contains(" ")) { 
     return true; 
    } else { 
     return false; 
    } 
} 

/** 
* Tests if a given word is equal to the current password. 
* 
* @param test Word that should be tested 
* @return true If test is equal to the current password 
*/ 

public boolean testWord(java.lang.String test) { 
    if (test == INITIAL) { 
     return true; 
    } else { 
     return false; 
    } 
} 

/** 
* Changes this password. 
* 
* @param oldpass The current password 
* @param newpass The new password 
* @return true if oldpass is equal to the current password and that newpass is an acceptable password 
*/ 

public boolean setWord(java.lang.String oldpass, java.lang.String newpass) { 
    if (testWord(oldpass) && acceptable(newpass)) { 
     return true; 
    } else { 
     return false; 
    } 
} 
} 
+0

'java.lang'에 클래스의 전체 경로를 입력 할 필요가 없습니다. 예. 'public static final String INITIAL'은 완벽하게 괜찮습니다. –

+0

우리 학교가 어떻게 우리에게 그것을 주었는지, 나는 그것이 더 쉬웠다 고 생각했다. 그러나, 내가 무엇을 알고 있는지에 관해) 당신의 설명에 대해 감사한다. – Koen

답변

14

오류는 컴파일러가 그것이라고 정확히 - 당신은 최종 필드를 가지고,하지만 아무것도 그것을 설정하지 않습니다.

최종 필드는 정확히 번으로 지정되어야합니다. 당신은 그것에 전혀 지정하지 않습니다. 우리는 그 문서가 의미하는 바를 알지 못합니다. ("표준 초기 암호") 아마도 당신이 알고 자하는 기본 암호가있을 것입니다. 해당 값을 입력란에 지정해야합니다 (예 :

public static final String INITIAL = "defaultpassword"; 

또한 : java.lang.String을 쓸 필요가 없습니다. 짧은 이름 (String) 만 사용하십시오. 코드에서 정규화 된 이름을 사용하는 것이 거의 불가능합니다. 사용중인 유형을 가져오고 java.lang의 모든 항목이 자동으로 가져 오기됩니다.

추가적으로 : don't compare strings using ==; use .equals instead.또한

:

if (condition) { 
    return true; 
} else { 
    return false; 
} 

그냥 쓸 수 있습니다 : :이 같은 코드가 언제든지

public boolean acceptable(String suggestion) { 
    return suggestion.length() >= 6 && !suggestion.contains(" "); 
} 
+0

고마워, 그 시작해야, 위의 모든 구현됩니다, 모두 도움이되고 내 기술 수준, 아주 좋은 덕분에 다시 감사합니다! 1 개의 질문이 남아 있습니다. setWord 메소드를 사용할 수 있습니까? 이 메서드에 지정된 패스워드에 public static final String INITIAL 인 패스워드를 설정해야한다. – Koen

+0

@Koen 일단 최종 변수가 초기화되면 그 값을 변경할 수 없습니다. 그래서 일단'INITIAL = '을 설정하면 나중에 새로운 값을'INITIAL'에 다시 할당 할 수 없습니다. 'INITIAL'이 디폴트 값을 가지고있는 것을 고려한 다음, 정규 (비 최종적) 문자열이 현재 설정되어있는 값을 유지하도록 할 수 있습니다.이 값은 처음에는'INITIAL'이지만, 나중에 다시 다른 값으로 변경할 수 있습니다 'setWord' 또는 다른 메소드. –

+0

나는 그것을 알아 냈다, 고마워! 다음과 같이 구현 : \t 공개 static final java.lang.String INITIAL = "Initial"; \t 개인 문자열 wachtwoord; \t 공개 암호() { \t \t wachtwoord = INITIAL; \t} – Koen

0
: 예를 들어

return condition; 

를, 당신의 acceptable 방법은 다음과 같이 쓸 수있다

상수 변수 n에 어떤 값도 할당하지 않기 때문에

public static final java.lang.String INITIAL ="initial"; 

내가 보여 주었다 선언 변수에서 상수

등의 변수를 선언 쉽게 있다는 :

public static final java.lang.String INITIAL; 

변화 예를 들어

에 한 번 eeds는 할당 할 int 변수에 값을 할당하는 방법 :

int numberOfHoursInADay = 24; 우리는이 값이 절대로 현실 세계에서 변경 로 변경되지 않을 것을 알고 있으므로 프로그램에 없는지 확인하십시오. 이 최종 키워드 개질제 첨가함으로써 수행된다

최종 INT의 NUMBER_OF_HOURS_IN_A_DAY = 24;

최종 키워드 이외에 당신은 변수 이름의 경우 표준 자바 명명 규칙에 따라 대문자로 변경 한 것으로 나타났습니다해야한다. 이렇게하면 어떤 변수가 코드에서 어떤 상수인지 파악하는 것이 훨씬 쉬워집니다.

우리가 지금 시도하고 NUMBER_OF_HOURS_IN_A_DAY의 값을 변경하는 경우 :

최종 INT의 NUMBER_OF_HOURS_IN_A_DAY = 24; NUMBER_OF_HOURS_IN_A_DAY = 36; 컴파일러에서 다음 오류가 발생합니다.

최종 변수 NUMBER_OF_HOURS_IN_A_DAY에 값을 할당 할 수 없습니다. 은 다른 기본 데이터 형식 변수 중 하나에 대해 동일하게 적용됩니다. 을 상수로 만들려면 final 키워드를 선언에 추가하기 만하면됩니다.

Source and Read More

또 다른 오류 :

경우 (테스트 == INITIAL) {

당신은 equals()에를 사용해야은 두 개의 문자열

이유 비교? 참조

+0

대단히 감사합니다. 매우 명확하고 매우 도움이되었습니다. – Koen

0

내가 어디 정적을 제공 Password.java 어디에서나 볼 수 없습니다 동일한 위치에 찾는 경우

equals()

는 기준을 비교하면

== 찾고있는 내용 againts 비교 최종 INITIAL이 지정됩니다. 그것은 여기서 문제가되어야합니다.