Wątek przeniesiony 2014-04-07 00:18 z Java przez ŁF.

Metoda z instrukcją if

0

Witam,

Jestem bardzo początkujący - mam mały problem z zadaniem a mianowicie mam następującą klasę Main:
Kod:

 
public class Main {
  public static void main(String ... args) {    
    Zbiornik z1 = new Zbiornik(200);
    System.out.println(z1);  
    z1.dolej(40);
    System.out.println(z1);
    z1.odlej(50);
    System.out.println(z1);
    Zbiornik z2 = new Zbiornik(1000);
    z2.dolej(500);
    System.out.println(z2);
  }
}

dla której mam stworzyć klasę Zbiornik - wszystko już działa poza jednym - kiedy zmienię wartości dolewanej wody do zbiornika otrzymuję na konsoli wydruki o pojemności zbiornika poniżej 0 lub też przekraczające wprowadzoną pojemność zbiornika. Poniżej stworzona przeze mnie klasa Zbiornik:

 
public class Zbiornik 
{
     private static int iloscZbiornikow=1;
     
     private int numer;
     private double pojemnosc;
     private double stan;
     public double woda;
     
     public Zbiornik(double pojemnosc)
     {
       numer=iloscZbiornikow++;
       this.pojemnosc=pojemnosc;
       woda = 0;
       stan = 0;
     }
       
     public double dolej(double woda)
     { 
       this.woda=woda;
       if ((stan+= woda) > pojemnosc) return pojemnosc;
       else return stan;
     
     }
     
     public double odlej(double woda)
     {
       this.woda=woda;
      if ((stan -=woda) <= 0) return 0;
       else return stan;
     }
        public String toString()
     {
           return "Zbiornik "+numer+", pojemność "+pojemnosc+", stan wody "+stan;
     }
}

Jak mogę inaczej zapisać warunek if w obu danych metodach klasy Zbiornik żeby nie zwracały mi wartości większej niż dana pojemność zbiornika w przypadku dolewania i mniejszej niż 0 w przypadku odlewania??
Z góry dzięki za wszelkie wskazówki.

1
  1. Po co Ci pole woda w klasie zbiornik?
  2. Skąd wiesz co zwracają metody odlej i dolej? Nigdzie nie korzystasz ze zwracanych wartości.
  3. Możesz inaczej wyświelać, np. tak:
public String toString()
{
     return "Zbiornik "+numer+", pojemnosc "+pojemnosc+", stan wody "+Math.max(0,stan);
}
0

Ok, usunąłem pole woda ze Zbiornik, wprowadziłem też zmianę w metodzie toString() - ale nie rozwiązuje to problemu z przekraczaniem maksymalnej wartości pojemności zbiornika gdyż pierwszy zadeklarowany zbiornik po dolaniu np z1.dolej(300) wyświetli mi pojemność 300 a nie zadeklarowane maksymalne 200. Co z tym zrobić?

public class Main {
  public static void main(String ... args) {    
    Zbiornik z1 = new Zbiornik(200);
    System.out.println(z1);  
    z1.dolej(300);
    System.out.println(z1);
    z1.odlej(50);
    System.out.println(z1);
    Zbiornik z2 = new Zbiornik(1000);
    z2.dolej(500);
    System.out.println(z2);
  }
}
public class Zbiornik 
{
	  private static int iloscZbiornikow=1;
	  
	  private int numer;
	  private double pojemnosc;
	  private double stan;
	  
	  public Zbiornik(double pojemnosc)
	  {
	    numer=iloscZbiornikow++;
	    this.pojemnosc=pojemnosc;
	    stan = 0;
	  }
	    
	  public double dolej(double woda)
	  { 
		 if ((stan+= woda) > pojemnosc) return pojemnosc;
		 else return stan;
	  
	  }
	  
	  public double odlej(double woda)
	  {
		if ((stan -=woda) <= 0) return 0;
	    else return stan;
	  }
	  	public String toString()
	  {
	  		return "Zbiornik "+numer+", pojemność "+pojemnosc+", stan wody "+Math.max(0,stan);
	  }
} 
0

Już mi się udało :)

public class Zbiornik 
{
	  private static int iloscZbiornikow=1;
	  
	  private int numer;
	  private double pojemnosc;
	  private double stan;
	  
	  public Zbiornik(double pojemnosc)
	  {
	    numer=iloscZbiornikow++;
	    this.pojemnosc=pojemnosc;
	    stan = 0;
	  }
	    
	  public void dolej(double woda)
	  { 
		  if((stan+= woda)>pojemnosc)
		  stan=pojemnosc;
	  
	  }
	  
	  public void odlej(double woda)
	  {
		  if((stan-= woda)<0)
		  stan=0;
	  }
	  	public String toString()
	  {
	  		return "Zbiornik "+numer+", pojemność "+pojemnosc+", stan wody "+stan;
	  }
}

Teraz nie wyświetla wartości poniżej zera ani też nie przekracza maksymalnej określonej pojemności zbiornika.
Dzięki za wskazówki :)

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