ahoj, potreboval bych osetrit vstup tak, aby uzivatel mohl zadat pouze cela cisla z daneho intervalu (treba 1-100). Udelal sem to pomoci exceptions, coz sice funguje ale nemuzu prijit na to, jak to udelat takovym zpusobem ze kdyz uzivatel zada treba pismeno nebo cislo mimo interval, tak ho to necha zadavat znovu a znovu a znovu dokud nezada spravne cislo v intervalu... Nevite nekdo jak na to? diky
Fórum › Java
Vstup - pouze cisla z daneho intervalu
/* Metoda vraci cislo typu int, prectene ze vstupu
* Nacitani se opakuje, dokud neni vse vporadku
*/
public static int ctiInt() {
int cislo = 0;
String vstup;
boolean nacteno = false;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
do {
try {
vstup = in.readLine();
cislo = Integer.valueOf(vstup).intValue();
if(cislo>= 1 && cislo <=100){
nacteno = true;
}
}
catch (NumberFormatException e) {
System.out.println("Musite zadat cislo! Zadejte znovu. " + e.getMessage());
}
catch (IOException e) {
System.out.println("Chybne nactene cislo! Zadejte znovu. " + e.getMessage());
}
}while (!nacteno);
return cislo;
}
Třebas tak :)
Upravil sem si to pro scanner, ale nefunguje :-(. V čem je chyba ?
int PocetPoli = 1;
boolean nacteno = false;
do {
try {
PocetPoli=sc.nextInt();
if(PocetPoli>= 1 && PocetPoli <=100){
nacteno = true;
}
}
catch (NumberFormatException e) {
System.out.println("Musite zadat cislo! Zadejte znovu. " + e.getMessage());
}
}while (!nacteno);
Ok, upravil sem to do teto podoby, ale stejne to nefunguje napr kdyz zadam zaporne cislo nebo cislo vetsi nez 100.
int PocetPoli = 1;
boolean nacteno = false;
do {
Scanner sc = new Scanner(System.in);
try {
PocetPoli=sc.nextInt();
if(PocetPoli>= 1 && PocetPoli <=100){
nacteno = true;
}
}
catch (Exception e) {
System.out.println("Musite zadat cislo! Zadejte znovu. ");
}
}while (!nacteno);
Ani s tou mi to nefunguje. Na vyjimku exception (uplne stejne i na NumberFormatException) to vyhodi hlasku kdyz zadam nejaky znak jako (`@#$,..) nebo kdyz zadam pismeno (asdf,...). Kdyz zadam cislo mimo rozsah, tak mi to vyhodi jinou vyjimku co sem si napsal, ale kdyz zadam cesky znak (á, í, ů, ...) tak to nevyhodi zadnou vyjimku a jen to prejde na dalsi radek s tim ze mam napsat jine cislo.
scanner.nextInt() tieto znaky asi vyhodnocuje ako 0 ... btw nextInt ma taku chybicku ze ak vrati exception tak neodriadkuje cache klavesnice ... ale ty vytvaras novy scanner pri kazdej iteracii cize ta tento problem netrapi
odporucam pouzit vstup bez scanneru tak ako to bolo v prvom priklade ... pripadne pouzit scanner.next() a na cislo si to premenit vo funkcii ako je v priklade
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Ošetření vstupů- jen kladná čísla z intervalu — založil Pajda
MaskEdit - pouze čísla — založil OndraBen
Jak v C ošetřit vstupy pouze na čísla? — založil Ryan99
Získání daného řádku — založil ProgDan
Moderátoři diskuze