Gå til innhold

JOptionPane med løkker.


Anbefalte innlegg

Jeg har en metode som skal legge inn nye deltakere i en 2D tabell med poeng sum. (legger link da metoden ble litt lang)

----------------- fjernet

 

Jeg vil at den skal begynne på poengStreng igjen dersom jeg får feilmeldinger på poengStreng inputtet, men nå så begynner den helt i begynnelsen igjen av while loopen. Er jeg nødt til å ha enda en while loop? Noen ideer/forbedringer? :p

Endret av serrghi
Lenke til kommentar
Videoannonse
Annonse

For det første kan du fjerne denne (skjønner du hvorfor?):

true &&

 

For det andre ville jeg ha laget to private metoder som tok inn en streng (beskjed til bruker) og returnerte henholdsvis en int og en streng. For eksempel kan du lage denne metoden:

private int readIntFromUser(String message, int lowerBound, int upperBound) {
  while (true) {
  String in = JOptionPane.showInputDialog(null, message + "[" + lowerBound + " - " + upperBound + "]", JOptionPane.PLAIN_MESSAGE);
  int result = Integer.parseInteger(in);
  if (result >= lowerBound && result <= upperBound) {
	 return result;
  }
  }
}

Da slipper du å ha så masse kode inni hoved-while-løkken din, og all brukersjekking blir gjort i en annen metode.

 

Merk at du kan out-source mye av denne metodekroppen til din metode private String readStringFromUser(String message);.

Lenke til kommentar
hvordan skal jeg gjøre det med å skrive ut feilmeldinger da? skal jeg gjøre det i de private metodene, eller kan jeg gjøre det i den metoden som jeg allerede har?
Jeg ville ha gjort det i de private metodene. Da kan du være sikker på at du i hovedløkken din får korrekt input, og da slipper du å ha så mye rot der.

Da blir alt dette:

	   while(true && antallDeltakereLagret < resultater.length)
		try{
		deltakerStreng = JOptionPane.showInputDialog(null, "Oppgi deltakernummer:", 
													 "Deltakernummer", JOptionPane.PLAIN_MESSAGE);
		if(deltakerStreng.equals("")){
			feilMelding("Ulovlig eller ingen verdi, prøv igjen.","Feil");
			continue;
		}
		deltakerNr = Integer.parseInt(deltakerStreng);

		if(deltakerNr < 0){
			feilMelding("Ulovlig eller ingen verdi, prøv igjen.","Feil");
			continue;
		}
		poengStreng = JOptionPane.showInputDialog(null, "Oppgi poengsum for deltaker " + 
												  deltakerNr + ":\n", "Poengsum", JOptionPane.PLAIN_MESSAGE);
		if(poengStreng.equals("")){
			feilMelding("Ulovlig eller ingen verdi, prøv igjen.","Feil");
			continue;
		}
		poengSum = Integer.parseInt(poengStreng);
		if(poengSum > 10 || poengSum < 0){
			feilMelding("\"" + poengSum + "\"" + " er ikke i intervallet [0-10]! Prøv igjen.",
					"Ikke Lovlig Poengsum");
		}

forkortet til:

int deltakerNummer = getIntFromUser("Skriv inn deltakernummer", 0, 100); // antar 100 er høyeste nummer
int poengSum = getIntFromUser("Oppgi poengsum", 0, 10);

Lenke til kommentar

Har prøvd meg litt frem nå og komt frem til dette:

 

	sensur

 

dette har jeg nå i den tidligere metoden:

sensur

 

der første parameter signaliserer om jeg vil ha et intervall input eller ikke. Men det funker ikke som det skal, ser ikke helt hvorfor.

Endret av serrghi
Lenke til kommentar

jeg vil ha det slik at dersom intervall variabelen er 1/true så skal det gi feilmelding dersom result er utenfor intervallet, eller gi meg resultatet dersom det var ok, men dersom den er 0/false så skal den bare drite i det der og gi meg resultatet.

 

 

EDIT ----

Jeg fikk det til :p bare jeg som ikke tenkte så langt. Tusen takk for hjelpen!

Endret av serrghi
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...