Vstup - pouze cisla z daneho intervalu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vstup - pouze cisla z daneho intervalu – Java – Fórum – Programujte.comVstup - pouze cisla z daneho intervalu – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Petr
~ Anonymní uživatel
697 příspěvků
15. 12. 2012   #1
-
0
-

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

Nahlásit jako SPAM
IP: 81.201.55.–
Reklama
Reklama
sakal910
Stálý člen
15. 12. 2012   #2
-
0
-

   

 /* 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 :)

Nahlásit jako SPAM
IP: 94.242.85.–
Petr
~ Anonymní uživatel
697 příspěvků
15. 12. 2012   #3
-
0
-

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);
Nahlásit jako SPAM
IP: 81.201.55.–
Petr
~ Anonymní uživatel
697 příspěvků
15. 12. 2012   #4
-
0
-

PocetPoli = cislo u tebe ;)

Nahlásit jako SPAM
IP: 81.201.55.–
Petr
~ Anonymní uživatel
697 příspěvků
15. 12. 2012   #5
-
0
-

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);
       
Nahlásit jako SPAM
IP: 81.201.55.–
Petr
~ Anonymní uživatel
697 příspěvků
15. 12. 2012   #6
-
0
-

Ok, už sem pořešil i tohle. Aktuálně mám jediný problém - když napíšu znak české abecedy, tak mi nevyskočí žádná hláška.

Nahlásit jako SPAM
IP: 81.201.55.–
sakal910
Stálý člen
15. 12. 2012   #7
-
0
-

#6 Petr
od toho tam je ta vyjímka NumberFormatException kterou tam nemáš...

Nahlásit jako SPAM
IP: 94.242.85.–
Petr
~ Anonymní uživatel
697 příspěvků
15. 12. 2012   #8
-
0
-

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.

Nahlásit jako SPAM
IP: 81.201.55.–
Flowy
~ Anonymní uživatel
448 příspěvků
15. 12. 2012   #9
-
0
-

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

Nahlásit jako SPAM
IP: 178.41.234.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 39 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý