Salutations,
J'essaie de valider si mon entier est nul. Si c'est le cas, je dois demander à l'utilisateur d'entrer une valeur. Mon fond est Perl, donc ma première tentative ressemble à ceci:
int startIn = Integer.parseInt (startField.getText());
if (startIn) {
JOptionPane.showMessageDialog(null,
"You must enter a number between 0-16.","Input Error",
JOptionPane.ERROR_MESSAGE);
}
Cela ne fonctionne pas, car Java attend une logique booléenne.
En Perl, je peux utiliser "existe" pour vérifier si les éléments de hachage/tableau contiennent des données avec:
@items = ("one", "two", "three");
#@items = ();
if (exists($items[0])) {
print "Something in \@items.\n";
}
else {
print "Nothing in \@items!\n";
}
Y a-t-il un moyen de le faire en Java? Merci de votre aide!
Jérémie
P.S. Perl existe info.
parseInt()
va simplement lancer une exception si l'analyse ne peut pas être complétée avec succès. Vous pouvez plutôt utiliser Integers
, le type d'objet correspondant, ce qui rend les choses un peu plus propres. Donc, vous voulez probablement quelque chose de plus proche de:
Integer s = null;
try {
s = Integer.valueOf(startField.getText());
}
catch (NumberFormatException e) {
// ...
}
if (s != null) { ... }
Attention si vous décidez d'utiliser parseInt()
! parseInt()
ne supporte pas une bonne internationalisation, vous devez donc franchir encore plus de défis:
try {
NumberFormat nf = NumberFormat.getIntegerInstance(locale);
nf.setParseIntegerOnly(true);
nf.setMaximumIntegerDigits(9); // Or whatever you'd like to max out at.
// Start parsing from the beginning.
ParsePosition p = new ParsePosition(0);
int val = format.parse(str, p).intValue();
if (p.getIndex() != str.length()) {
// There's some stuff after all the digits are done being processed.
}
// Work with the processed value here.
} catch (Java.text.ParseFormatException exc) {
// Something blew up in the parsing.
}
Essaye ça:
Integer startIn = null;
try {
startIn = Integer.valueOf(startField.getText());
} catch (NumberFormatException e) {
.
.
.
}
if (startIn == null) {
// Prompt for value...
}
int
s sont des types de valeur; ils ne peuvent jamais être null
. Au lieu de cela, si l'analyse échoue, parseInt
lancera une NumberFormatException
à attraper.
Il n'y a pas de exists
pour un SCALAIRE en Perl, de toute façon. Le chemin Perl est
defined( $x )
et l'équivalent Java est
anInteger != null
Ce sont les équivalents.
exists $hash{key}
Est comme le java
map.containsKey( "key" )
De votre exemple, je pense que vous cherchez
if (startIn! = null) {...
Pour moi, utiliser simplement la méthode Integer.toString () me convient parfaitement. Vous pouvez le convertir si vous voulez juste si tout est nul. Exemple ci-dessous:
private void setCarColor(int redIn, int blueIn, int greenIn)
{
//Integer s = null;
if (Integer.toString(redIn) == null || Integer.toString(blueIn) == null || Integer.toString(greenIn) == null )
Cela devrait aider.
Integer startIn = null;
// (optional below but a good practice, to prevent errors.)
boolean dontContinue = false;
try {
Integer.parseInt (startField.getText());
} catch (NumberFormatException e){
e.printStackTrace();
}
// in Java = assigns a boolean in if statements oddly.
// Thus double equal must be used. So if startIn is null, display the message
if (startIn == null) {
JOptionPane.showMessageDialog(null,
"You must enter a number between 0-16.","Input Error",
JOptionPane.ERROR_MESSAGE);
}
// (again optional)
if (dontContinue == true) {
//Do-some-error-fix
}
Je ne pense pas que vous puissiez utiliser "existe" sur un entier en Perl, mais uniquement sur des collections. Pouvez-vous donner un exemple de ce que vous voulez dire en Perl et qui correspond à votre exemple en Java?.
Étant donné une expression qui spécifie un élément de hachage ou un élément de tableau, renvoie true si l'élément spécifié dans le hachage ou le tableau a déjà été initialisé, même si la valeur correspondante n'est pas définie.
Cela indique que cela ne s'applique qu'aux éléments de hachage ou de tableau!