Jeden parametr do wielu obiektow

0

Jak wczytac z klawiatury parametr "a" dla dwoch obiektow z innymi wartosciami? Np wczytalem parametr "a" do obiektu Prostokad, teraz chcialbym uzyc tego samego parametru z inną wartoscia do obiektu Prostopadloscian. Pojawia sie blad ze parametr jest juz zdefiniowany.

package obliczaniefigury;

import java.util.Scanner;

public class ObliczanieFigury {

    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);   

    Kwadrat kwadrat = new Kwadrat();

    System.out.println("Pole kwadratu oraz obwod. Wprowadz boki kwadratu:");
    double a = scan.nextDouble();
    double b = scan.nextDouble();
    System.out.println("Pole:"+kwadrat.PoleKwadratu(a, b));    
    System.out.println("Obwod kwadratu");
    System.out.println("Obwod:"+kwadrat.ObwodKwadratu(a, b));

    Kolo kolo = new Kolo();

    System.out.println("Pole kola. Wprowadz srednice:");
    double r = scan.nextDouble();
   System.out.println("Pole kola:"+kolo.PoleKola(r));
    System.out.println("Obwod kola:"+kolo.ObwodKola(r));

    Prostopadloscian prostopadloscian = new Prostopadloscian();
    double a = scan.nextDouble();  // TU POJAWIA SIE BLAD
    double b = scan.nextDouble();  // TU POJAWIA SIE BLAD
    double c = scan.nextDouble();

    } 

}

package obliczaniefigury;

import java.util.Scanner;

public class Kwadrat {

    double a; // pola klasy 
    double b;

    public void Kwadrat( double a, double b){
    this.a = a;
    this.b = b;
    }

    public  double PoleKwadratu(double a, double b){ 
   return a*b ;
    }
    public double ObwodKwadratu(double a, double b){
    return (2*a)+(2*b);
    }   
}

package obliczaniefigury;

public class Prostopadloscian {

    double a;
    double b;
    double c;

    public void Prostopadloscian(double a, double b, double c){
    this.a=a;
    this.b=b;
    this.c=c;
    }

    public  double PoleProstopadloscianu (double a, double b,double c){ 
   return (2*a*b)+(2*a*c)+(2*b*c) ;
    }

     public  double ObjetoscProstopadloscianu (double a, double b,double c){ 
   return a*b*c ;
    }
}
0

Najprościej nadpisać.

public class ObliczanieFigury {

    public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);   

    Kwadrat kwadrat = new Kwadrat();

    System.out.println("Pole kwadratu oraz obwod. Wprowadz boki kwadratu:");
    double a = scan.nextDouble();
    double b = scan.nextDouble();
    System.out.println("Pole:"+kwadrat.PoleKwadratu(a, b));    
    System.out.println("Obwod kwadratu");
    System.out.println("Obwod:"+kwadrat.ObwodKwadratu(a, b));

    Kolo kolo = new Kolo();

    System.out.println("Pole kola. Wprowadz srednice:");
    double r = scan.nextDouble();
   System.out.println("Pole kola:"+kolo.PoleKola(r));
    System.out.println("Obwod kola:"+kolo.ObwodKola(r));

    Prostopadloscian prostopadloscian = new Prostopadloscian();
    a = scan.nextDouble();
    b = scan.nextDouble();
    c = scan.nextDouble();

    } 

}
0

Czym sie rózni ten kod od tego którego napisalem? Ktos mi wytlumaczy dlaczego jak dopisze do parametrów "a" i "b" "double" to wyrzuca blad, notamiast "c" bez "double" nie bedzie dzialac?

   Prostopadloscian prostopadloscian = new Prostopadloscian();
    a = scan.nextDouble();
 b = scan.nextDouble();
 double c = scan.nextDouble(); 
0
    double a = scan.nextDouble();
    double b = scan.nextDouble();
    ...
    double a = scan.nextDouble();  // TU POJAWIA SIE BLAD
    double b = scan.nextDouble();  // TU POJAWIA SIE BLAD
    double c = scan.nextDouble();

Nie wolno (w tym samym zakresie widoczności) mieć dwóch zmiennych o takiej samej nazwie. W szczególności, nie wolno dwukrotnie deklarować zmiennej.

1

Zmienna musi być raz zadeklarowana. Potem (w tym samym bloku) może być już używana bez deklaracji. Niemniej, musi być zadeklarowana dokładnie raz. Redeklaracja zmiennej to błąd.

double a = 4; // ok
a = 5; // ok
double a = 6; // nie okej, powtórzona deklaracja
double a = 5;
b = 4; // błąd, nie ma zadeklarowanej b
1

Obejrzałem teraz dokładnie kod, on jest błędny. Kod klasy Kwadrat powinien wyglądać tak:

public class Kwadrat {

    double a; // pola klasy 
    double b;

    public Kwadrat( double a, double b){ //było zbędne słowo void
    this.a = a;
    this.b = b;
    }

    public  double PoleKwadratu(){ 
   return a*b ;
    }
    public double ObwodKwadratu(){
    return (2*a)+(2*b);
    }   
}

a odpowiedni fragment kodu klasy ObliczanieFigury tak:

    Scanner scan = new Scanner(System.in);   

    System.out.println("Pole kwadratu oraz obwod. Wprowadz boki kwadratu:");
    double a = scan.nextDouble();
    double b = scan.nextDouble();
    Kwadrat kwadrat = new Kwadrat(a,b);
    System.out.println("Pole:"+kwadrat.PoleKwadratu());    
    System.out.println("Obwod:"+kwadrat.ObwodKwadratu());

Można też zupełnie zrezygnować ze zmiennych a i b, zniknie wtedy problem jak je nazwać :P (nie polecam tego rozwiązania)

    System.out.println("Pole kwadratu oraz obwod. Wprowadz boki kwadratu:");
    Kwadrat kwadrat = new Kwadrat(scan.nextDouble(),scan.nextDouble());

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