Vlastna vynimka – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Vlastna vynimka – Java – Fórum – Programujte.comVlastna vynimka – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Sony1230
Duch
21. 4. 2012   #1
-
0
-

Ahojte, robím jeden program a potreboval by som ošetriť vstupy. Zrejme bude na to vhodne použiť nejakú vlastnú výnimku. Som začiatočník, majte prosim strpenie :D

Scanner citac = new Scanner(System.in);

moznosti = citac.nextInt();

Potrebujem ošetriť to, že keď zadam niečo iné ako 1 alebo 2 alebo 3, aby mi vypisalo zly vstup (to znamená napr 6,k,x é...). písmeno aby to vypísalo.

To to načítanie mám v jednej triede a ,ám pomerne vela nacitani v programe kôli prehladnosti by bolo asi rumnejsie aby som si tie vynimky nejako dal do novej triedy a odtial ich budem volať.

Vedeli by ste mi s tým pomôcť?

Ďakujem pekne :)

Nahlásit jako SPAM
IP: 95.102.127.–
Reklama
Reklama
Antilles0
Stálý člen
21. 4. 2012   #2
-
0
-

Ahoj,

mně přijde zbytečné kvůli tomu psát vlastní výjimku. Můj oblíbený způsob je toto:

int cislo;
Scanner vstup = new Scanner(System.in);
do{
	cislo = vstup.nextInt();
	if(cislo == 0 || cislo == 1 || cislo == 2)
		break;
	System.out.println("Neplatný vstup.");
}while(true);

Samozřejmě by nebylo od věci, odchytit tuším InputMismatchException :)

Nahlásit jako SPAM
IP: 77.48.30.–
Dejte mi flétnu a já budu hrát, dejte mi Javu a já budu psát.
Sony1230
Duch
21. 4. 2012   #3
-
0
-

Áno, tak som to mal :)

Ale robím to do školy a požadujú, aby som mal ošetrenie pomocou výnimiek :)

Tuto mam nacitanie s nejakym osetrenim, ale nejde mi to.

String vstup1 = citac.nextLine();
       char firstChar = vstup1.charAt(0);
    
        vstup1 = (int) firstChar;
  try{
  
  
   if (vstup < 48 || vstup > 50)        //1 je v ASCII 48, 3 je v ASCII 50,       takže ak je zadane cislo mencie ako 1 alebo je väčšie ako 3 tak chyba
   
   if (vstup > 97 && vstup < 122)    // tu zase kontroluje ci je vstup pismeno, a je v ASCII 97 a z je v ASCII 122
   
  
  
   throw new Vynimky(1);
  }
  catch (Vynimky e){
   System.out.println("chyba"+e);
  }


A tu to mam triedu Vynimky 

public class Vynimky extends Exception{

public Vynimky(int i){
 
  if(i==1)
   System.out.println("Zla volba");
 
}

}
Nahlásit jako SPAM
IP: 95.102.127.–
Antilles0
Stálý člen
21. 4. 2012   #4
-
+1
-
Zajímavé

#3 Sony123
Aha. Tak když výjimky být musí, tak musí   . Za svým kódem si s dovolením budu stát  

int cislo;
Scanner vstup = new Scanner(System.in);
cislo = vstup.nextInt();
if(cislo == 0 || cislo == 1 || cislo == 2)
		return cislo;
throw new MojeVyjimka("Mimo rozsah moznosti");

A potom je standartní postup:

public class MojeVyjimka extends Exception{

	public MojeVyjimka(String text){
		super(text);
	}

}

Pokud potřebuješ načítat číslo, použij nextInt(). Je to praktické!  

To jaké je to číslo ošetříš pomocí své výjimky, to jestli je to číslo ... pokud uživatel nezadá číslo, metoda vyhodí InputMismatchException. Tuším.  

Nahlásit jako SPAM
IP: 77.48.30.–
Dejte mi flétnu a já budu hrát, dejte mi Javu a já budu psát.
Sony1230
Duch
22. 4. 2012   #5
-
0
-

Takže mám to teraz takto

   boolean prvykrat = true;
   do {
     
      if (!prvykrat) {
       System.out.println("Chybny vstup\n");
     
       System.out.print("Zadaj moznost: ");
      }
      prvykrat = false;
      try {
           moznost= citac.nextInt();
      } catch (InputMismatchException e) {
          moznost = -1;
          citac.next();
          continue;
      } catch (Exception e) {
         break;
      }
public class Vynimky extends Exception{
	
	//co mam dat sem?
}

Ale chcel by som to nejako rozdeliť, že si spravím triedu Vynimky a tam by som to dal a potom iba volal pri nacitavani ked na ňu natrafí. Ako mi to napísal kolega vyššie. Vedel by mi  niekto môj kód tak rozdeliť?

Diky

Nahlásit jako SPAM
IP: 178.41.208.–
Antilles0
Stálý člen
22. 4. 2012   #6
-
0
-

Tam nedáváš nic. Respektive můžeš si upravit konstruktor a dát tam informaci o tom, co se vlastně pokazilo. Ale jinak nic.

public class Vynimky extends Exception{
	
	public Vynimky(String message){
		super(message);
	}
}

Uplně stačí. Ale jelikož tu výjimku nikde nevyhazuješ (nikde není throw new Vynimky("Chybny vstup");) tak já prostě nevím, jak to teď chceš použít. Ale snad jsem pomohl.

Nahlásit jako SPAM
IP: 77.48.30.–
Dejte mi flétnu a já budu hrát, dejte mi Javu a já budu psát.
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, 38 hostů

Podobná vlákna

Vlastná prípona — založil tommyv580

Vlastná guestbook - jak na to? — založil Tocimanko

Vlastná šifra ako zapísať — založil Maximilián

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ý