Avatar billede public2 Nybegynder
11. december 2009 - 19:32 Der er 9 kommentarer og
1 løsning

Tjek og valider input

Hej eksperter,

jeg har et program som, når det er færdigt med sin opgave, står og venter på et input for brugeren. Inputten den skal have er enten "y" for "yes" eller "n" for no. Ved "yes" skal den starte forfra og brugeren kan bruge funktionen igen og ved "n" skal den afslutte.

Dette er lavet, men jeg sidder lige nu og knokler på at få lavet en validering på om man gør enten: bare trykker enter (altså input.length() == 0) eller skriver et hvilket som helst andet bogstav / sætning som ikke er enten "y" eller "n".

Gør man det, så skal den bare blive ved med at vente på input, dvs. hverken skrive en fejlbesked eller afslutte programmet.

Jeg har prøvet med koden:

while (input.length() == 0 || input.charAt(0) != "n".charAt(0) || input.charAt(0) != "y".charAt(0)) {
  input = scanner.nextLine();
}

Med denne kode virker det i sådan en grad, at den ikke afbryder programmet ved "enter" eller et andet bogstav end "n" eller "y", men til gengæld så registrer den så ikke "y" eller "n" efter man har skrevet noget andet end de to bogstaver.

Efter mit while-loop har jeg følgende kode der gerne skulle tage sig af når man skriver en af de rigtige karakter:

if (input.charAt(0) == "n".charAt(0)) {
  keepOn = false;
  System.out.println("Terminated");
}
else {
  keepOn = true;
}

Jeg håber en af jer har en løsning, evt. med brug af en dobbelt while (??) eller noget andet og jeg håber at I forstår hvad det er jeg spørger om :-)

På forhånd tak for jeres tid

Mvh
Public2
Avatar billede arne_v Ekspert
11. december 2009 - 20:10 #1
Hvad med:

do {
    input = scanner.nextLine();
} while(input.length() != 1 || !"YyNn".contains(input[0]));

Utestet, men ....
Avatar billede public2 Nybegynder
11. december 2009 - 22:14 #2
Hej Arne,

det virker desværre ikke. Eclipse giver mig fejlkoden

"The type of the expression must be an array type but it resolved to String"

Ved du hvad jeg skal gøre for at teste din løsning?
Avatar billede arne_v Ekspert
11. december 2009 - 22:53 #3
do {
    input = scanner.nextLine();
} while(input.length() != 1 || !"YyNn".contains(input.charAt(0)));
Avatar billede arne_v Ekspert
11. december 2009 - 22:55 #4
if (input.charAt(0) == "n".charAt(0)) {

maa ioevrigt kunne laves som en af:

if (input.charAt(0) == 'n') {

if (input.equals("n")) {
Avatar billede public2 Nybegynder
11. december 2009 - 23:40 #5
Jeg får sgu stadig en øv fejl når jeg prøver din nye kode. Nu fortæller Eclipse mig, at:

The method contains(CharSequence) in the type String is not applicable for the arguments (char)

Men jeg vil lige prøve din if-kode du skriver der, men det bliver nok i morgen :-)
Avatar billede arne_v Ekspert
11. december 2009 - 23:51 #6
do {
    input = scanner.nextLine();
} while(input.length() != 1 || "YyNn".indexOf(input.charAt(0))<0);
Avatar billede public2 Nybegynder
12. december 2009 - 07:57 #7
Arne du er en mirakelmager er du!

Det virker smukt og jeg kan simpelthen ikke fatte at jeg ikke tænkte på do-while, men bare brugte "while". Det er jo så indlysende når du har lavet det :-)

Men i hvert fald, tusind tak, du har reddet lørdagen. Smid et svar
Avatar billede public2 Nybegynder
12. december 2009 - 08:00 #8
Hov, glemte lige... Din "if equals" kode virkede også helt fint, så den bruger jeg i stedet for da den ser lidt pænere ud. Så tak igen :-)
Avatar billede arne_v Ekspert
12. december 2009 - 14:52 #9
do while er ikke nær så meget brugt som while, men det er løsningen hvis problem stillingen siger mindst et gennemløb.

Og et svar.
Avatar billede public2 Nybegynder
12. december 2009 - 22:15 #10
Tak, det vil jeg huske det råd :-)
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