

Java - Vyjímky
Dobrý den,
narazil jsem v programování na problém se kterým si lámu hlavu a nevím jak ho vyřešit.
Programuji metodu která má načíst číslo z klávesnice a nastavit v ní vyjímku, která ověří jestli zadané číslo je zadáno správně.Problém který řeším je ten že já v případě že se jedná o špatně zadané číslo bych chtěl vypsat že ("Zadane cislo je chybne: " + a) a tím bych chtěl skončit ale metoda po mě vyžaduje zadat návratovou hodnotu kterou když zadám tak mi ale navazující program následně pokračuje stou návratovou hodnotou alt to nechci, chci aby to u toho "Zadane... " skoncilo. Nevíte někdo co udělat jinak?
static int nactiAover(){
Scanner sc = new Scanner(System.in);
System.out.print("Zadej cislo v desitkove soustave: ");
String a = sc.nextLine();
System.out.println("---Vysledky---");
int b;
try{
return b = Integer.parseInt(a);
} catch (NumberFormatException e){
System.out.print("Zadane cislo je chybne: " +a);
}
->tady by mělo být return b=0 ;
}
Ahoj.
Toho co chceš dosáhneš asi nejjednodušeji tak, že použiješ vyjímkový blok finally, který bude vracet dohodnutou hodnotu hlavní funkci main.
A teprve v hlavní funkci main vytiskeš podle návratové hodnoty případné System.out.print("Zadane cislo je chybne: " +a); a funkci main ukončíš návratovou hodnotou (okamžité ukončení programu).
Snad jsem to napsal srozumitelně.
//Editace
.
Teď jsem se zamyslel ještě jednou. Ten program je špatně navržený
To co vrací funkce nactiAover() ti vlastně už jednou vrací funkce Integer.parseInt(a);
Takže celá funkce nactiAover() je redundantní obal.
Nebo spíš jinak já právě nevím jak to správně popsat. Mám program který načte číslo z klávesnice (v desítkové soustavě) a vypíše ho ale pokud by bylo zadáno číslo ve špatném tvaru (např. 12a) tak to napíše že číslo je ve špatném tvaru ale pokračuje to (protože tam je cyklus while) a chce to číslo zadat znovu. A já potřebuju to udělat tak aby po tom co to někdo zadá špatně tak mi to jen vypíše že bylo zadáno číslo ve špatném tvaru ale už to nebude chtít pokračovat jenže pokud odendám while tak něco stejně musím vrátit ale metoda musí být integer tudíž nelze navrátit např. to 12a tak vůbec nevím jak to udělat aby to skončilo po tom co to vypíše že bylo chybně zadáno.
Výnimku nemusíš odchytávať hneď, ako nastane, ale až na tom mieste, na ktorom ju chceš ošetriť - v tvojom prípade budeš mať ten while blok umiestnený vnútri try bloku.
Takže namiesto pôvodného:
Budeš mať niečo takéto:
Ono nejde o ten while me jde o to že když prostě je zadán špatný formát tak já chci aby to vypsalo toto
"Byl zadán špatný formát : 12a
při správném toto
"Bylo zadáno číslo : 12
Jenomže při špatném zadání mi to vypíše toto
"Byl zadán špatný formát : 12a
"Bylo zadáno číslo : 0
já prostě potřebuju přijít na to jak metodu ukončit už při tom kdy to zjistí že je to špatný formát. Na místo toho aby pokračovala metoda main s návratovou hodnotou 0.
No ani v tom mojom príklade nešlo o ten while - skrátka necháš prebublať výnimku až nad kód, ktorý už nechceš vykonať. Keď nechceš vykonávať cyklus, necháš ju prebublať nad cyklus.
Môžeš ju obslúžiť hneď tým, že vypíšeš nejakú chybovú hlášku a hneď na to vyhodíš ďalšiu výnimku (alebo rethrowneš tú, čo máš). Nechápem, čo je na tom nezrozumiteľné.