Problem ze zmienną w warunku pętli do...while

0

Witam,

Ostatnio zacząłem się uczyć Javy. Napisałem prosty kalkulator, jednak wyskoczyły mi w nim 2 błędy dotyczące zmiennych.

import java.util.Scanner;

public class Kalkulator1 {
    
    public static void main(String[] args) {
        
        do{
            //MENU
            System.out.println("Wpisz odpowiednią cyfrę, aby wykonać potrzebne działanie");
            System.out.println("1) dodawanie  \n2) odejmowanie  \n3) mnożenie  \n4) dzielenie  \n5) potęgowanie  \n6) pierwiastkowanie  \n7) liczba bezwzględna  \n8) zaokrąglenie");
            
            Scanner in1 = new Scanner(System.in);
            int menu = in1.nextInt();
            
            switch(menu){
            
            case 1:
                System.out.print("Podaj pierwszą liczbę: ");
                Scanner inA = new Scanner(System.in);
                double a = inA.nextDouble();
                
                System.out.print("Podaj drugą liczbę: ");
                Scanner inB = new Scanner(System.in);
                double b = inB.nextDouble();
                    
                System.out.println(a+" + "+b+" = "+suma(a, b));
                break;
            
            case 2:
                System.out.print("Podaj pierwszą liczbę: ");
                Scanner inC = new Scanner(System.in);
                double c = inC.nextDouble();
                
                System.out.print("Podaj drugą liczbę: ");
                Scanner inD = new Scanner(System.in);
                double d = inD.nextDouble();
                
                System.out.println(c+" - "+d+" = "+roznica(c, d));
                break;
            
            case 3:
                System.out.print("Podaj pierwszą liczbę: ");
                Scanner inE = new Scanner(System.in);
                double e = inE.nextDouble();
                
                System.out.print("Podaj drugą liczbę: ");
                Scanner inF = new Scanner(System.in);
                double f = inF.nextDouble();
                
                System.out.println(e+" * "+f+" = "+mnozenie(e, f));
                break;
            
            case 4:
                System.out.print("Podaj dzielną: ");
                Scanner inG = new Scanner(System.in);
                double g = inG.nextDouble();
                
                System.out.print("Podaj dzielnik: ");
                Scanner inH = new Scanner(System.in);
                double h = inH.nextDouble();
                
                System.out.println(g+" / "+h+" = "+dzielenie(g, h));
                break;
                
            case 5:
                System.out.print("Podaj liczbę: ");
                Scanner inI = new Scanner(System.in);
                double i = inI.nextDouble();
                
                System.out.print("Podaj potegę: ");
                Scanner inJ = new Scanner(System.in);
                double j = inJ.nextDouble();
                
                System.out.println(i+" do potęgi "+j+" = "+potegowanie(i, j));
                break;
            
            case 6:
                System.out.print("Podaj liczbę: ");
                Scanner inK = new Scanner(System.in);
                double k = inK.nextDouble();
                
                System.out.println("Pierwiastek z liczby "+k+" równa się "+pierwiastkowanie(k));
                break;
                
            case 7:
                System.out.print("Podaj liczbę: ");
                Scanner inL = new Scanner(System.in);
                double l = inL.nextDouble();
                
                System.out.println("Liczba bezwzględna z liczby "+l+" to "+liczbaBezwzgledna(l));
                break;
            
            case 8:
                System.out.print("Podaj liczbę: ");
                Scanner inM = new Scanner(System.in);
                double m = inM.nextDouble();
                
                System.out.println("Zaokrąglona do całości liczba "+m+" równa się "+zaokraglenie(m));
                break;
            }
            
            //PETLA
            
            do{    
                System.out.println("Wpisz 1, aby ponownie wykonać dowolne działanie, lub 2 aby wyjść z programu");
                Scanner inLiczba = new Scanner(System.in);
                int liczba = inLiczba.nextInt();
            }while(liczba != 1 && liczba != 2);    
        }while(liczba == 1);
    }
    
    //METODY (FUNKCJE)
    static double suma(double a, double b){
        return a + b;
    }
    static double roznica(double a, double b){
        return a - b;
    }
    static double mnozenie(double a, double b){
        return a * b;
    }
    static double dzielenie(double a, double b){
        return a / b;
    }
    static double potegowanie(double a, double b){
        return Math.pow(a, b);
    }
    static double pierwiastkowanie(double a){
        return Math.sqrt(a);
    }
    static double liczbaBezwzgledna(double a){
        return Math.abs(a);
    }
    static int zaokraglenie(double a){
        return (int) Math.round(a);        
    }
}

Błędy wyskakują mi tutaj:

            }while(liczba != 1 && liczba != 2);	
        }while(liczba == 1);

Błędy dotyczą zmiennej liczba. Mam jeszcze jedno pytanie. Dlaczego powyższe metody muszą być statyczne (wcześniej nie były statyczne i wyskakiwały mi błędy)?

Pozdrawiam,
Piotrek

0
1996piotr napisał(a):

Dlaczego powyższe metody muszą być statyczne (wcześniej nie były statyczne i wyskakiwały mi błędy)?

Ponieważ metody statyczne mogą odwoływać się tylko do metod zadeklarowanych jako statyczne. Main () jest statyczna.
Wyrzuć te funkcje poza main () do jakiejś klasy;

0

Ad.1. wynieś deklaracje int liczba przed pętlą.
Ad.2.

public class Kalkulator1
  {
   public static void main(String[] args)
     {
      (new Kalkulator1()).main();
     }
   public void main()
     {
      fun();
     }
   public void fun()
     {
     }
  }
0
1996piotr napisał(a):

Błędy wyskakują mi tutaj:

            }while(liczba != 1 && liczba != 2);	
        }while(liczba == 1);

Piotrek

To chodzi o zakres istnienia zmiennych ograniczony {}.
Tworzysz je w doale w **while **już nie istnieją
Przenieś te dwie linijki :

Scanner inLiczba = new Scanner(System.in);
int liczba = inLiczba.nextInt(); 

Przed do while.

0

Bardzo dziękuję za szybkie odpowiedzi. Cieszę się, że są programiści, którzy pomagają mniej doświadczonym, bo to na pewno nie mój ostatni problem z Javą :D
Mam nadzieję, że ja też kiedyś będę w stanie komuś pomóc :)

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