• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jeżeli wystąpi wyjątek powtórz kod(try) problem.

Object Storage Arubacloud
0 głosów
326 wizyt
pytanie zadane 5 maja 2017 w Java przez Szejk Obywatel (1,510 p.)

zaznaczam ze muszę użyć wyjątku.

Chce by np po wystąpieniu wyjątku użytkownik wprowadził ponownie wartość czyli powrócił do try.  

na razie gdy np. wprowadzę do scannera jakieś słowo by wymusić działanie wyjątku.  wyjątek się pojawia i gdy chce ponownie wprowadzić wartość kompilator omija  mi      c =in.nextInt();  i przechodzi od razu ponownie  do wyjątku;

package Zadlab8;

import java.util.Scanner;



public class Main {
	 

	public static void main(String[] args) {
		
		 Scanner in = new Scanner(System.in);
		 Scanner br = new Scanner(System.in);
		 
		 int k;
		Convert_bin liczenie =new Convert_bin();
		
		boolean czyPoprawne = false;
		
		while(!czyPoprawne){
		try{
			int c=0; 
		c =in.nextInt();
		liczenie.convert(c);
		break;
		}
		catch(Exception e){
			System.out.println("Został zgłoszony wyjątek");	
		}
			System.out.println("wprowadz inna wartosc? wybierz 1");
			System.out.println("ignore = 0");
			k= br.nextInt();
			if (k==0) czyPoprawne=true;
		}
		System.out.println(liczenie.lista.values());
		
		
	}

}

Tu dam jeszcze klase która działa jak by ktoś chciał sprawdzić działanie programu.

 

package Zadlab8;

import java.util.HashMap;
import java.util.Map;

public class Convert_bin {
	Map<Integer, StringBuilder> lista = new HashMap<Integer, StringBuilder>();
	StringBuilder  tak = new StringBuilder ();
	
	void convert(int numers){
		int k = 0;
		int num=numers;
		while(num!=0){
		k=num%2;
		num=num/2;
		if(k !=0)
			tak.append("1");
		else
			tak.append("0");
		}
		lista.put(numers, tak);
	}
	
	void get(Integer tak){
		System.out.println(lista.get(tak));
		
	}
	
	 public boolean contai(Integer key)  {
	        return lista.containsKey(key);
	    }

}

 

3 odpowiedzi

0 głosów
odpowiedź 5 maja 2017 przez Szejk Obywatel (1,510 p.)
 
Najlepsza

rozwiązałem ten problem w następujący sposób jak coś..   dla pokoleń :D  

musiałem użyć BufferedReader  zamiast Scannera ponieważ nie za dobrze działa w wyjątkach

 

poprawnie działający kod  

 

package Zadlab8;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;



public class Main {
	 

	public static void main(String[] args) {
		
		BufferedReader odczyt = new BufferedReader(new InputStreamReader(System.in));
		 Scanner in =new Scanner(System.in);
		
		Convert_bin liczenie =new Convert_bin();
		int c=-1;
		boolean czyPoprawne = false;
		
		while(!czyPoprawne){
		try{
		c = Integer.parseInt(odczyt.readLine());
		liczenie.convert(c);
		break;
		}
		catch(Exception e){
			System.out.println("Został zgłoszony wyjątek");	
			System.out.println("zignorowac problem? - 1");
			System.out.println("wprowadz alternatywna wartosc? - 2");	
			int k=in.nextInt();
		switch(k){
		case 1:{
			czyPoprawne=true;
			break;
		}
		case 2:{
			czyPoprawne = c == -1? false : true;
			break;
		}
		}
		}
		
		//czyPoprawne = c == -1? false : true;
		}
		System.out.println(liczenie.lista.values());
		
		
	}

}

 

+2 głosów
odpowiedź 5 maja 2017 przez Wiciorny Ekspert (269,710 p.)

Wywołaj zatem, w złapaniu wyjątku to co chcesz wykonać :) mimo jego wystąpienia 

 System.out.println("wprowadz inna wartosc? wybierz 1");
            System.out.println("ignore = 0");
            k= br.nextInt();
            if (k==0) czyPoprawne=true;

przenieś do bloku catch 

finally{ Blok instrukcji, który wykona się niezależnie, czy wyjątki wystąpią, czy nie }

Ewentualnie użyj finally i tam umieść kod: to wykona się zawsze niezależnie od wyjątku 

komentarz 5 maja 2017 przez Szejk Obywatel (1,510 p.)
wiesz nie za bardzo chce to w finally dać ponieważ wykona się niezależnie czy będzie wyjątek czy nie. ale już rozwiązałem tą kwestie scanner nie działa za dobrze w try   musiałem użyć BufferedReader a z niego przeprawiać na inty
komentarz 6 maja 2017 przez MajsterKark Nowicjusz (220 p.)
ale możesz w bloku finally, uwzględnić jeszcze jeden warunek " sprawdzając czy blok wykonał catcha", jak np catch się nie wykonał/wykonał to sprawdzasz w finally tez
0 głosów
odpowiedź 6 maja 2017 przez K0XM4N Gaduła (3,640 p.)

Gdy wprowadzisz drugi raz złą wartość to i tak zgłosi się wyjątek i wywali program. Wystarczy to w bloku catch:

            catch(Exception e){
                System.out.println("Został zgłoszony wyjątek, wprowadz jeszcze raz:");
                czyPoprawne = false;
            }

 

komentarz 6 maja 2017 przez MajsterKark Nowicjusz (220 p.)
ale tutaj to nie ma znaczenia, bo   w samym catch'u i tak robisz przypisanie do zmiennej. więc jeśli aktualny stan to false- to nic nie zmienia
komentarz 6 maja 2017 przez K0XM4N Gaduła (3,640 p.)
To ten własnie stan decyduje o poprawności wprowadzonej zmiennej. Jeśli jest false to user ma wprowadzić ją jeszcze raz i tak w kółko

Podobne pytania

0 głosów
1 odpowiedź 471 wizyt
pytanie zadane 2 maja 2019 w Java przez Metarinda Użytkownik (740 p.)
0 głosów
1 odpowiedź 1,072 wizyt
pytanie zadane 30 września 2017 w Java przez Dieva Nowicjusz (150 p.)
+1 głos
3 odpowiedzi 947 wizyt
pytanie zadane 27 sierpnia 2017 w Java przez Patryk Moros Początkujący (470 p.)

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...