Le vide final champ INITIAL peut ne pas avoir été initialisé
Je suis à la programmation en Java.
J'ai ajouté des commentaires pour chaque méthode pour expliquer ce qu'ils sont censés faire (selon la mission). J'ai ajouté ce que je sais pour le stub de Password.java
(que j'ai créé après avoir recherché une javadoc fourni par l'école).
Ma question n'est pas à propos de plusieurs fonctions, je sais qu'il y a des erreurs dans testWord et setWord, mais je vais gérer moi-même.
Ma question est sur cette ligne:
public static final java.lang.String INITIAL;
Cette ligne est fourni par l'école, donc je dois supposer que c'est correct, je ne peux pas trouver toute la documentation n'importe où sur le champ constant de la valeur INITIALE, alors si quelqu'un pouvait me fournir des infos sur ce qui serait étonnant (eg. comment est géré? que faut-il stocker? si quoi que ce soit? type?).
Aussi Im obtenir une erreur sur cette ligne dans Eclipse:
Le vide final champ INITIAL peut ne pas avoir été initialisé
Pourquoi est-ce une erreur ici?
Merci à l'avance sur les commentaires.
Pour information, le code de 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;
}
}
}
java.lang
. par exemple. public static final String INITIAL
est parfaitement bien (et de préférence).c'est comment notre école nous l'a donné, je pensais que c'était plus facile mais bon, je ne sais 😉 merci pour votre commentaire.
OriginalL'auteur Koen | 2014-11-14
Vous devez vous connecter pour publier un commentaire.
L'erreur est exactement ce que le compilateur dit qu'il est, vous avez un champ final, mais rien de réglage.
Final champs doivent être assignées à exactement une fois. Vous n'êtes pas en lui attribuant à tous. Nous ne savons pas ce que le champ est destiné à représenter l'au-delà de la documentation ("La norme initiale de mot de passe") - sans doute il est par défaut le mot de passe qui vous êtes censés savoir. Vous devez affecter cette valeur pour le champ, par exemple
En outre: vous n'avez pas besoin d'écrire
java.lang.String
; il suffit d'utiliser le nom court (String
). C'est très rarement une bonne idée d'utiliser pleinement les noms qualifiés au sein de votre code, il suffit d'importer les types que vous utilisez, et être conscients du fait que tout dansjava.lang
est importé automatiquement.En outre: ne pas comparer des chaînes à l'aide de
==
; utiliser.égal à
au lieu.En outre: à tout moment vous disposez d'un code comme ceci:
vous pouvez simplement écrire:
Par exemple, votre
acceptable
méthode peut être écrite comme suit:Une fois que votre dernière variable est initialisée, sa valeur ne peut pas être changé. Donc, une fois que vous définissez
INITIAL = <some value>
, vous ne pouvez pas plus tard re-affecter une nouvelle valeur àINITIAL
. Vous souhaitez peut-être envisager d'avoirINITIAL
tenir une valeur par défaut, puis régulièrement (non définitif) de la Chaîne de tenir la valeur, qui estINITIAL
pour commencer, mais peut être changé pour un autre plus tard sur la viasetWord
ou une autre méthode.J'ai tout compris, merci ! Mis en œuvre comme ceci: public static final java.lang.Chaîne INITIALE = "Initial"; private String wachtwoord; public Mot de passe() { wachtwoord = INITIAL; }
OriginalL'auteur Jon Skeet
Je ne vois pas de n'importe où dans le Password.java où le static final INITIAL est affecté. Ça doit être le problème ici.
OriginalL'auteur glaze
Vous n'avez jamais attribuer de la valeur à votre constant variable à tous, en raison de la constante variable doit être affectée une fois
changement de
Par exemple:
La déclaration d'une Variable comme une Constante
Source et Lire la suite
Une autre erreur:
if (test ==) {
Vous devez utiliser
equals()
à comparer deux chaînespourquoi?
equals()
comparer contre le contenu de ce que vous êtes à la recherche pour==
comparer la référence si les références sont à la recherche au même endroitOriginalL'auteur Kick Buttowski