pętla, continue
Ostatnio zmodyfikowano 2018-04-15 18:03
adrian.paz Temat założony przez niniejszego użytkownika |
pętla, continue » 2018-04-13 17:59:57 Witam co zrobić, aby pętla wykonywała się od nowa podczas wystąpienia jakiegoś błędu tzn wtedy kiedy wystąpi errorMessage. Normalnie dałbym "hasMoreTokens()" ale teraz nie działa. Próbowałem z continue i break w połączeniu z while(true) ale też nie działa. Pomóżcie! package ć w5;
import java.util.Scanner; import java.util.StringTokenizer;
public class Zad2 { String linia; static double wyn = 0; static boolean isOk = true; static double kalkulator( String linia ) { String errorMessage = "\nWadliwe dane! Spróbuj ponownie!\n"; StringTokenizer token = new StringTokenizer( linia ); while( isOk = false ) { if( token.countTokens() != 3 ) { System.out.println( errorMessage ); isOk = false; } String a = token.nextToken(), b = token.nextToken(), c = token.nextToken(); int num1 = 0, num2 = 0; try { num1 = Integer.parseInt( a ); num2 = Integer.parseInt( c ); } catch( NumberFormatException e ) { System.err.println( errorMessage ); isOk = false; } char znak = b.charAt( 0 ); if( b.length() != 1 ||( znak == '/' && num2 == 0 ) ) { System.out.println( errorMessage ); isOk = false; } switch( znak ) { case '+': wyn = num1 + num2; break; case '-': wyn = num1 - num2; break; case '*': wyn = num1 * num2; break; case '/': wyn = num1 / num2; break; case '%': wyn = num1 % num2; break; default: { System.out.println( errorMessage ); isOk = false; } } } return wyn; } public static void main( String[] args ) { System.out.println( "Witaj w moim kalkulatorze! Wprowadz jakieś działanie (np. 1 + 2)" ); Scanner skan = new Scanner( System.in ); String linia = skan.nextLine(); System.out.println( "Wynik: " + Zad2.kalkulator( linia ) ); skan.close(); } }
|
|
jankowalski25 |
» 2018-04-13 19:39:17 Najczęściej spotykane bugiOgólnie jak wstawiasz zmienną typu bool (czy tam boolean w Javie) w miejscach takich, jak if czy while , to zwykle wystarczy wpisać zmienna albo !zmienna . Nie ma sensu porównywać tego do true albo false (zwłaszcza w Javie, gdzie programista sam nie może przeciążać operatorów, więc raczej nie widzę tutaj żadnego sensu w pisaniu kodu w stylu zmienna == false ). |
|
adrian.paz Temat założony przez niniejszego użytkownika |
» 2018-04-13 20:45:18 Cenna uwaga aczkolwiek ale dalej nie znam odpowiedzi na moje pytanie. Btw probowalem napisać „!isOk” ale wyskakiwał błąd. |
|
adrian.paz Temat założony przez niniejszego użytkownika |
» 2018-04-13 20:47:31 Dodam że odkąd zrobiłem taką pętle to wynik zawsze jest 0.0 a jak zrobić coś co uwzględniłem w wyjątku to wyskoczy errorMessage ale pętla się już je wykonuje |
|
skovv |
» 2018-04-14 16:04:14 while( isOk = false ) zamiast sprawdzac prawdziwosc nadajesz zmiennej wartosc false. Oba znaki rownosci. |
|
skovv |
» 2018-04-14 16:06:55 Na koncu kazdego case( w switch ) musisz dac break: ... isOK = false; break; ...
|
|
adrian.paz Temat założony przez niniejszego użytkownika |
» 2018-04-14 17:51:06 Pomocy!! Dla isOk wykonuje się dobrze program. Ale dla false wyskoczy odpowiedni komunikat potem metoda zwróci śmieciowy wynik i nie wykonuje się jeszcze raz, koniec jakichkolwiek akcji jest.. :(( Jak mam przerobić ten program? package ć w5;
import java.util.Scanner; import java.util.StringTokenizer;
public class Zad2 { String linia; static double wyn = 0; static boolean isOk = true; static double kalkulator( String linia ) { String errorMessage = "\nWadliwe dane! Spróbuj ponownie!\n"; StringTokenizer token = new StringTokenizer( linia ); do { if( token.countTokens() != 3 ) { System.err.println( errorMessage + " 1" ); isOk = false; break; } String a = token.nextToken(), b = token.nextToken(), c = token.nextToken(); int num1 = 0, num2 = 0; try { num1 = Integer.parseInt( a ); num2 = Integer.parseInt( c ); } catch( NumberFormatException e ) { System.err.println( errorMessage + " 2" ); isOk = false; break; } char znak = b.charAt( 0 ); if( b.length() != 1 ||( znak == '/' && num2 == 0 ) ) { System.out.println( errorMessage + " 3" ); isOk = false; break; } switch( znak ) { case '+': wyn = num1 + num2; break; case '-': wyn = num1 - num2; break; case '*': wyn = num1 * num2; break; case '/': wyn = num1 / num2; break; case '%': wyn = num1 % num2; break; default: { System.out.println( errorMessage + " 4" ); isOk = false; break; } } } while( isOk == false ); return wyn; } public static void main( String[] args ) { System.out.println( "Witaj w moim kalkulatorze! Wprowadz jakieś działanie (np. 1 + 2)" ); Scanner skan = new Scanner( System.in ); String linia = skan.nextLine(); System.out.println( "Wynik: " + Zad2.kalkulator( linia ) ); skan.close(); } }
|
|
jankowalski25 |
» 2018-04-14 18:01:28 nie wykonuje się jeszcze raz, koniec jakichkolwiek akcji jest |
Jeśli warunek pętli jest fałszywy, to z jakiego powodu pętla miałaby wykonać się jeszcze raz? |
|
« 1 » 2 3 4 |