Komunikacja pomiędzy klasami

0

Prośba o wskazanie co zrobiłem źle w poniższym kodzie.
Próbuję nauczyć się komunikacji pomiędzy klasami i w tym celu stworzyłem klasę Obliczenia i klasę Klasa2. W Obliczenia chcę wykonać mnożenie a i b, w Klasa2 wykonać dodawanie c i d, a następnie w Obliczenia, odjąć wynik dodawania od wyniku mnożenia.

// (a*b) - (c+d) 
public class Obliczenia
{ 
	private Klasa2 klasa2;
	private int a, b, c, d;
	
	public Obliczenia()
	{
		Klasa2 klasa2 = new Klasa2();
		this.klasa2 = klasa2;
	}
	
	public void setA(int a)
	{
		this.a = a;
	}
		
	public void setB(int b)
	{
		this.b = b;
	}
		
	public void setC(int c)
	{
		this.c = c;
	}
		
	public void setD(int d)
	{
		this.d = d;
	}
	
	public int getA()
	{
		return a;
	}
	
	public int getB()
	{
		return b;
	}
	
	public int getC()
	{
		return c;
	}
	
	public int getD()
	{
		return d;
	}
				    
        public int mnożenie()
	{
	    return getA() * getB();    	
	}
	 
        public int odejmowanie()
   	{
	    return mnożenie() - klasa2.getDodawanie();    	
   	}
       
	public static void main(String[] args) throws IOException 
	{ 
	  Obliczenia obliczenia = new Obliczenia();
	  obliczenia.setA(5);
	  obliczenia.setB(4);
	  
	  Klasa2 klasa2 = new Klasa2();
	  klasa2.setC(3);
	  klasa2.setD(2);
	  
	  System.out.println("a wynosi: " + obliczenia.getA());
	  System.out.println("b wynosi: " + obliczenia.getB());
	  System.out.println("c wynosi: " + klasa2.getC());
	  System.out.println("d wynosi: " + klasa2.getD());
	  
          System.out.println("Wynik mnożenia: " + obliczenia.mnożenie());
          System.out.println("Wynik dodawania: " + klasa2.getDodawanie());
          System.out.println("Wynik odejmowania: " + obliczenia.odejmowanie());    
	}   
}

i

public class Klasa2
{ 
	protected int c, d;

	public void setC(int c)
	{
		this.c = c;
	}
	
	public void setD(int d)
	{
		this.d = d;
	}
	
	public int getC()
	{
		return c;
	}
	
	public int getD()
	{
		return d;
	 }
	
	public int dodawanie() 
	{
		return getC() + getD();
	}

	public int getDodawanie()
	{
		return dodawanie();
	}   
}
0

Bo masz dwie zmienne Klasa2 klasa2; jedna w konstruktorze Obliczenia druga w main

0

Czy tak będzie poprawnie?

public class Obliczenia
{ 
	private static Klasa2 klasa2;
	private int a, b, c, d;
	
	public Obliczenia()
	{
		Klasa2 klasa2 = new Klasa2();
		Obliczenia.klasa2 = klasa2;
	}
	
	public void setA(int a)
	{
		this.a = a;
	}
		
	public void setB(int b)
	{
		this.b = b;
	}
		
	public void setC(int c)
	{
		this.c = c;
	}
		
	public void setD(int d)
	{
		this.d = d;
	}
	
	public int getA()
	{
		return a;
	}
	
	public int getB()
	{
		return b;
	}
	
	public int getC()
	{
		return c;
	}
	
	public int getD()
	{
		return d;
	}
				    
    public int mnożenie()
	{
	    return getA() * getB();    	
	}
	 
        public int odejmowanie()
   	{
	    return mnożenie() - klasa2.getDodawanie();    	
   	}
       
	public static void main(String[] args) throws IOException 
	{  
	  Obliczenia obliczenia = new Obliczenia();
	  obliczenia.setA(5);
	  obliczenia.setB(4);
	  
	  klasa2.setC(3);
	  klasa2.setD(2);
	  
	  System.out.println("a wynosi: " + obliczenia.getA());
	  System.out.println("b wynosi: " + obliczenia.getB());
	  System.out.println("c wynosi: " + klasa2.getC());
	  System.out.println("d wynosi: " + klasa2.getD());
	  
      System.out.println("Wynik mnożenia: " + obliczenia.mnożenie());
      System.out.println("Wynik dodawania: " + klasa2.getDodawanie());
      System.out.println("Wynik odejmowania: " + obliczenia.odejmowanie());    
	}   
}
0

Nie, bo klasa2 jest statyczna czyli wspólna do wielu obiektów.

public class Obliczenia
{ 
    private Klasa2 klasa2;
    private int a, b; 
    public Obliczenia() { klasa2 = new Klasa2(); } 
    public void setA(int _a) { a = _a; } 
    public void setB(int _b) { b = _b; }
    public void setC(int _c) { klasa2.c = _c; }
    public void setD(int _d) { klasa2.d = _d; }
    public int getA() { return a; } 
    public int getB() { return b; } 
    public int getC() { return klasa2.c; }
    public int getD() { return klasa2.d; } 
    public int mnożenie() { return a*b; }
    public int dodawanie() { return klasa2.getDodawanie(); } // przemianuj to getDodawanie
    public int odejmowanie() { return mnożenie()-dodawanie();  }
    public static void main(String[] args) throws IOException 
    {  
      Obliczenia obliczenia = new Obliczenia();
      obliczenia.setA(5);
      obliczenia.setB(4); 
      obliczenia.setC(3);
      obliczenia.setD(2); 
      System.out.println("a wynosi: " + obliczenia.getA());
      System.out.println("b wynosi: " + obliczenia.getB());
      System.out.println("c wynosi: " + obliczenia. getC());
      System.out.println("d wynosi: " + obliczenia.getD()); 
      System.out.println("Wynik mnożenia: " + obliczenia.mnożenie());
      System.out.println("Wynik dodawania: " + obliczenia.dodawanie());
      System.out.println("Wynik odejmowania: " + obliczenia.odejmowanie());    
    }   
}
0

Dziękuję za wyjaśnienia.
A jeśli zmienne c i d także umieszczę w klasie Obliczenia, czy poniższy kod będzie prawidłowy?

public class Obliczenia
{ 
	private Klasa2 klasa2;
	private int a, b, c, d;

	public Obliczenia() {klasa2 = new Klasa2(this);}	
	public void setA(int _a) {a = _a;}		
	public void setB(int _b) {b = _b;}		
	public void setC(int _c) {c = _c;}	
	public void setD(int _d) {d = _d;}
	public int getA() {return a;}
	public int getB() {return b;}
	public int getC() {return c;}
	public int getD() {return d;}
	public int mnożenie() {return a*b;}
	public int dodawanie() {return klasa2.getDodawanie();}			    	 
        public int odejmowanie() {return mnożenie()-dodawanie();}
       
	public static void main(String[] args) throws IOException 
	{  
	  Obliczenia obliczenia = new Obliczenia();
	  obliczenia.setA(5);
	  obliczenia.setB(4);
	  obliczenia.setC(3);
	  obliczenia.setD(2);
	 
	  System.out.println("a wynosi: " + obliczenia.getA());
	  System.out.println("b wynosi: " + obliczenia.getB());
	  System.out.println("c wynosi: " + obliczenia.getC());
	  System.out.println("d wynosi: " + obliczenia.getD());
	  
          System.out.println("Wynik mnożenia: " + obliczenia.mnożenie());
          System.out.println("Wynik dodawania: " + obliczenia.dodawanie());
          System.out.println("Wynik odejmowania: " + obliczenia.odejmowanie());    
	}	 
}

i

public class Klasa2
{ 
	private Obliczenia obliczenia;
	
	public Klasa2(Obliczenia obliczenia) {this.obliczenia = obliczenia;}
		
	public int dodawanie() {return obliczenia.getC() + obliczenia.getD();}
	public int getDodawanie() {return dodawanie();}   
}
0
  1. Po kiego ci to getDodawanie?
  2. Tworzenie osobnej klasy tylko po to aby coś ściągnęła z innej konkretnej klasy - mija się z celem. Jeszcze gdyby ściągała z interfejsu ...

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