Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pętla, continue

Ostatnio zmodyfikowano 2018-04-15 18:03
Autor Wiadomość
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!
C/C++
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(), // pierwsza liczba
            b = token.nextToken(), // znak
            c = token.nextToken(); // druga liczba
           
            int num1 = 0, num2 = 0; // pomocnicze zmienne
           
            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();
    }
   
}
P-170650
jankowalski25
» 2018-04-13 19:39:17
while( isOk = false )
» Kurs C++ / FAQNajczęściej spotykane bugi pytanie/odpowiedź
Ogó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
).
P-170651
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.
P-170653
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
P-170654
skovv
» 2018-04-14 16:04:14
while( isOk = false )
 zamiast sprawdzac prawdziwosc nadajesz zmiennej wartosc false. Oba znaki rownosci.
P-170664
skovv
» 2018-04-14 16:06:55
Na koncu kazdego case( w switch ) musisz dac break:
C/C++
...
isOK = false;
break;
...
P-170665
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?
C/C++
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(), // pierwsza liczba
            b = token.nextToken(), // znak
            c = token.nextToken(); // druga liczba
           
            int num1 = 0, num2 = 0; // pomocnicze zmienne
           
            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();
    }
   
}
P-170673
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?
P-170674
« 1 » 2 3 4
  Strona 1 z 4 Następna strona