Tämän takia onkin ilman muuta järkevää eristää lukemiskoodi omaksi metodikseen:
/**
* Kysytään kokonaisluku. Jos annetaan ei-luku, kysytään uudelleen.
* @param kysymys näytölle tulostettava kysymys
* @param oletus arvo jota käytetään jos painetaanpelkkä Ret
* @return käyttäjän kirjoittama kokonaisluku
*/
public static int kysy_int(String kysymys, int oletus)
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while ( true ) {
System.out.print(kysymys+" >");
String s = "";
try {
s = in.readLine();
} catch (IOException ex) {
continue; // jatkaa silmukkaa
}
if ( ( s == null ) || ( s.equals("") ) ) return oletus;
try {
return Integer.parseInt(s);
} catch (NumberFormatException ex) {
System.out.println("Ei numero: " + s);
}
}
}
Nyt omassa ohjelmassamme voidaan korvata "koko hirveä sotku" vain yhdellä rivillä:
matka_mm = kysy_int("Anna matka millimetreinä",0);
Lisäsimme aliohjelmaamme vielä kutsuun yhden parametrin: oletus. Näin voidaan käyttäjälle antaa mahdollisuus painaa pelkästään Enter ja silti saadaan järkevä vastaus.
Anna matka millimeterinä (0) >