problem z petla do , while

0

Moim zadaniem jest stworzenie prostego programu a'la bankomat musi sprawdzać pin i wypłacać wielokrotności 100.
Problem jest ze sprawdzeniem czy pętla w case 2 sprawdzająca czy kwota jaka chcemy wypłacić jest wielokrotności 100. Bez względu na podaną wartość wychodzi z pętli do while. Czy ktoś mógłby podpowiedzieć początkującemu?

import java.io.IOException;
import java.util.*;
public class zadanie1 {
 
      
        public static void main(String[] args) throws IOException {
                Scanner sc=new Scanner(System.in);
                
                int pin;
                int kodPin=1145;   
                double stan=750; 
                int wyplata;
                
                
                System.out.println("****************************************");
                System.out.println("*              E-BANKOMAT              *");
                System.out.println("****************************************");
                System.out.println(" Witam w e-bankomacie! \n Podaj 4 liczbowy kod pin: ");
                pin=sc.nextInt();
                
                
                if(pin!=kodPin){
                        System.out.println("Kod pin jest nieprawidłowy");
                        System.out.println("Podaj 4 liczbowy kod pin: ");
                        pin=sc.nextInt();
                        
                }
                 if(pin!=kodPin){
                                System.out.println("Kod pin jest nieprawidłowy");
                                System.out.println("Podaj 4 liczbowy kod pin, w przypadku błędnego wpisania kodu karta zostanie zablokowana: ");
                                pin=sc.nextInt();
                                
                }
                 if(pin!=kodPin){
                                        System.out.println("Bledny kod pin: ");
                                        System.out.println("Karta zostala zablokowana, skontaktuj sie z operatorem bankomatu. \nZakonczono dzialanie programu.");
                }
                                
                else { 
                                        System.out.println("Kod pin prawidłowy. Wybierz jedną z opcji.\n"); 
                
                System.out.println();
                System.out.println("     1. Stan konta");
                System.out.println("     2. Wypłata pieniedzy");
                System.out.println("     3. Zakonczenie operacji");
                
                
                Scanner in = new Scanner(System.in);
                int w = in.nextInt();
        
                
                while(w!=0){
                    switch(w){
                        case 1: //sprawdzenie salda
                           
                          
                            System.out.println("****************************************");
                            System.out.println("*              E-BANKOMAT              *");
                            System.out.println("****************************************");
                    		System.out.println("");	
                    		  
                    		System.out.format("Stan konta wynosi " +stan+"zl.\n");
                    		System.out.println("Dziekuje za korzystanie z naszych uslug. \nProsze zabrac karte w ciagu 20 sekund.");
                    		
                    		break;
                            
                    		
                    		
                        case 2: //wyplata
                        	
                       int kwota;
                          
               
                        System.out.println("Podaj jaka kwote chcesz wyplacic. Kwota jaka chcesz wyplacic musi byc wielokrotnoscia 100!");
                      
                       
                        do { kwota = in.nextInt();
                            
                        }
                        
                        
                        
                  	  while(kwota/100==0);
                  	
                        
                  	  
                  	  
                                  if(kwota<=stan){  wyplata=(int) (stan-kwota);
                                	 stan=stan-wyplata;
                                  System.out.println("Wyplacono "+kwota+"Pozostalo "+stan+".");
                                          
                                          
                                     
                                          
                                          if(kwota>stan){
                                        	  
                                                System.out.println("Nie masz wystarczajacych zrodków na koncie.");
                                                 
                                          }}
                                              
                        	
                            System.out.println("Dziekuje za korzystanie z naszych uslug. \nProsze zabrac karte w ciagu 20 sekund.");
                            System.out.println("");
                            System.out.println("****************************************");
                            System.out.println("*              E-BANKOMAT              *");
                            System.out.println("****************************************");
      
                            break;
         
                            
                            
                        case 3: //koniec

                        	System.out.println("****************************************");
                            System.out.println("*              E-BANKOMAT              *");
                            System.out.println("****************************************");
                    		System.out.println("");	
                    		  
                    	
                    		System.out.println("Dziekuje za korzystanie z naszych uslug. \nProsze zabrac karte w ciagu 20 sekund.");
                            break;
                    }
         
                    break;
         
               
   
   
                }}}} 
1

Moja rada: podziel to na metody z których każda ma nie więcej niż 20 linijek.

0

Dzięki za rade :)

błędnie napisany algorytm był powodem nieprawidłowego działania, tak jest poprawnie

<while(kwota%100!=0);

teraz muszę dopisać pętle, która ustali limit dziennych wypłat.
Czy masz może jakiś pomysł?

0

Kod jest napisany naprawdę...fajnie :D Dobrze, że przynajmniej są komentarze ;) Wydaje mi się na pierwszy rzut oka, że źle sprawdzasz wielokrotność 100. Masz napisane pobieranie wartosći z inputa dopóki wprowadzone dane podzielone przez 100 są równe 0. Tak więc wszystko powyżej i równe 100 będzie pobierane jako wielokrotność 100, czyli 101, 102, 103...To nie są wielokrotnośći 100. Trzeba sprawdzić czy reszta przy dzieleniu przez 100 jest równe czyli operator "mod". Wystarczy zamiast do { kwota = in.nextInt(); } while(kwota/100==0);
dać: do { kwota = in.nextInt(); } while(kwota mod 100!=0);
W tej wersji dopóki wprowadzona kwota po podzieleniu przez 100 nie daje reszty 0, prosi o ponowne wpisanie kwoty.

0
Piotrek21 napisał(a):

To nie są wielokrotnośći 100. Trzeba sprawdzić czy reszta przy dzieleniu przez 100 jest równe czyli operator "mod"...

Oczywiście operator "%" zamiast "mod" ale widzę, że już sam na to wpadłeś, jakoś nie zauważyłem....

Co do limitu wypłat: statyczne pole i funkcja. Jeśli chciałbyś zachować ilość wypłat po zamknięciu programu to jeszcze/lub plik tekstowy, w którym zapisujesz/odczytujesz dane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1