Avatar billede muingaza Nybegynder
25. januar 2005 - 22:26 Der er 10 kommentarer

null eller streng som illegalt argument?

Denne forløkke bliver ved med at kræve et positivt argument fra brugeren. Problemet er bare at den kun gør det hvis brugeren indtaster et negativt tal. Hvis brugeren indtaster en streng eller slet ikke indtaster noget skulle den stadig blive ved med at spørge efter et positivt tal. Er dette muligt?


int a = new Integer(JOptionPane.showInputDialog("Enter a number")).intValue();

    for (int i = 0; a<0; i++){
      JOptionPane.showMessageDialog(null, "a has to be positive!");
      a = new Integer(JOptionPane.showInputDialog("Enter a number")).intValue();
    }
Avatar billede arne_v Ekspert
25. januar 2005 - 22:29 #1
Læs tallet ind som String, test for om det er et validt tal og hvis det er
så konverter til int.
Avatar billede kalp Novice
25. januar 2005 - 22:30 #2
øhm.. du skal vist bruge en while løkke hvis du vil have man skal kunne indtaste tal flere gange i træk.
Avatar billede kalp Novice
25. januar 2005 - 22:31 #3
ahh... JOptionPane.. never mind..
Avatar billede arne_v Ekspert
25. januar 2005 - 22:38 #4
Eksempel:

import javax.swing.JOptionPane;

public class ReadNums {
    public static boolean isNumber(String s) {
        if(s.length() <= 0) {
            return false;
        }
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c != ' ' && !Character.isDigit(c)) {
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) {
        for(int i = 0; i < 3; i++) {
            String s;
            do {
                s = JOptionPane.showInputDialog("Enter a number");
            } while(!isNumber(s));
            int v = Integer.parseInt(s);
            System.out.println(v);
        }
    }
}
Avatar billede arne_v Ekspert
25. januar 2005 - 22:38 #5
Du kan overveje heller ikke at tillade mellemrum i strengen.
Avatar billede muingaza Nybegynder
25. januar 2005 - 22:47 #6
Det var noget i den stil jeg mente, men den skal dog kun blive ved med at spørge efter tallet så længe brugeren indtaster noget forkert. Den ovenstående kode bliver ved med at spørge også selvom man indtaster noget rigtigt.
Avatar billede arne_v Ekspert
25. januar 2005 - 22:54 #7
Nej

Den kode indlæser 3 korrekte tal og slutter så
Avatar billede kalp Novice
25. januar 2005 - 23:05 #8
nu kan jeg komme med min kommentar hehe.. du skal bruge bruge en while løkke
Avatar billede snoop_one Nybegynder
26. januar 2005 - 00:59 #9
Det er en forkert tilgangsvinkel, efter min mening. I GUI design er det utroligt vigtigt at man ikke giver brugeren mulighed for at gøre noget forkert.
Du giver ham lov til at taste forkert også evaluere du det der er indtastet og notificere om det er gyldigt - hvis det ikke er gyldigt hvorfor er det så tilladt for brugeren at indtaste det?
Den rigtige måde at gøre det på, efter min mening, er at lave din egen dialog med en JTextField og benytte et filter (du kan finde et meget generelt filter på http://www.rgagnon.com/javadetails/java-0197.html) så har brugeren slet ikke mulighed for at taste forkert!

Men hvis du absolut vil gøre det på din måde så skulle understående kode kunne gøre det for dig:

public static void main(String[] args) {
        int a = -1;
        while (a < 0) {
            try {
                a = Integer.parseInt(JOptionPane
                        .showInputDialog("Enter a number"));
            } catch (NumberFormatException e) {
                a = -1;
            }
            if (a < 0) {
                JOptionPane.showMessageDialog(null, "a has to be positive!");
            }
        }
    }

men kønt er det ikke ;0)
Avatar billede kalp Novice
26. januar 2005 - 01:01 #10
kønt eller ej.. jeg ville se en while løkke og det så jeg hehe ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester