Zadanie z Javy, czemu nie ma oczekiwanego rezultatu?

0

http://www.jkozak.pl/przedmioty/java/zadania7.pdf
Tutaj ostatni przykład to treść zdania.
Ten z czasem.
Pobieranie liczby godzin i minut z ciągu znaków, też nie jest idealne, ale improwizowałem


public class Czas {
   private int godz;
   private int minuty;
   
   public Czas(int godz, int minuty){
	   this.godz=godz;this.minuty=minuty;
	   if(this.minuty>=60){
		   this.godz+=(this.minuty/60);
		   this.minuty=this.minuty%60;
	   }
	   
   }
   

   public Czas(String ciag){
	   
	   String tab[]=ciag.split("h");
	   StringBuilder sb1=new StringBuilder();
	   StringBuilder sb2=new StringBuilder();
	   
	   if(tab[0].length()==3){
	   sb1.append(tab[0].charAt(0)); sb1.append(tab[0].charAt(1));
	   this.godz=Integer.valueOf(sb1.toString());
	   }
	   else if(tab[0].length()==2){
	   sb1.append(tab[0].charAt(0));
	   this.godz=Integer.valueOf(sb1.toString());
	   }
	   
	   if(tab[1].length()==7){
	   sb2.append(tab[1].charAt(1)); sb2.append(tab[1].charAt(2));
	   this.minuty=Integer.valueOf(sb1.toString());
	   }
	   else if(tab[1].length()==6){
		   sb2.append(tab[1].charAt(1));
		   this.minuty=Integer.valueOf(sb1.toString()); 
	   }
	   
	   if(this.minuty>=60){
		   this.godz+=(this.minuty/60);
		   this.minuty=this.minuty%60;
	   }
	   
	   }

   public String toString(){
	   return godz+" h "+minuty+" min";
   }
 
   
   public Czas dodaj(Czas t){
	   
	   int godziny=this.godz;
	   int minuty=this.minuty;
	   godziny+=t.godz;
	   minuty+=t.minuty;
	   if(minuty>=60){
		   godziny+=(minuty/60);
		   minuty=minuty%60;
	   }
	   return new Czas(godziny, minuty);
   }

   public Czas odejmij(Czas t){
	   int godziny=this.godz;
	   int minuty=this.minuty;
	   godziny-=t.godz;
	   minuty-=t.minuty;
	   
	   if(minuty<0){
		   int ile=minuty/60;
		   godziny+=ile;
		   minuty=60+(minuty%60);
	   }
	  
	   return new Czas(godziny, minuty); 
   }

   public Czas pomnoz(int ile){
	   int godziny=this.godz;
	   int minuty=this.minuty;
	   godziny*=3;
	   minuty*=3;
	   
	   if(minuty>=60){
		   godziny+=(minuty/60);
		   minuty=minuty%60;
	   }
	   
	   return new Czas(godziny, minuty);
	   
   }

   public static Czas sumuj(Czas[] tab, int n){
	    Czas d=new Czas(0,0);
	   for(int i=0; i<n; i++){
		    d.dodaj(tab[i]);
	   }
	   return d;
   }


   public static void main(String[] args){
	   Czas t1=new Czas(10, 56);
	   Czas t2=new Czas(0, 123);
	   System.out.println("t1 = " + t1);
	   System.out.println("t2 = " + t2);
	   System.out.println("t1 + t2 = " + t1.dodaj(t2));
	   System.out.println("t1 - t2 = " + t1.odejmij(t2));
	   Czas [] tab = { t1, t2, t2 };
	   System.out.println("Czas.sumuj dla t1 + t2 + t2 = " +Czas.sumuj(tab, 3));
	   
	   System.out.println("t1 * 2 = " + t1.pomnoz(2));
	   Czas t3=new Czas("3 h 17 min");
	   System.out.println("Konstruktor złańcuchem: " + t3);
   }
}

Log z konsoli:
t1 = 10 h 56 min
t2 = 2 h 3 min
t1 + t2 = 12 h 59 min
t1 - t2 = 8 h 53 min
Czas.sumuj dla t1 + t2 + t2 = 0 h 0 min
t1 * 2 = 32 h 48 min
Konstruktor złańcuchem: 3 h 3 min

1

Odpaliłem u siebie i mam coś takiego:

t1 = 10 h 56 min
t2 = 0 h 123 min
t1 + t2 = 12 h 59 min
t1 - t2 = 9 h 53 min
Czas.sumuj dla t1 + t2 + t2 = 0 h 0 min
t1 * 2 = 32 h 48 min
Konstruktor złańcuchem: 3 h 3 min

Nie wiem dlaczego u Ciebie są tylko zera.

1

Niezgodne są 3 4 wyniki:
t2 powinno dać 2 h 3 m a nie 123 minuty - z tym sobie poradzisz bo już to robiłeś ;)
W sumuj masz taki problem że wywołuje on funkcję dodaj która zwraca nowy obiekt typu Czas - Ty go ignorujesz.
W pomnoz masz wyrą... gdzieś argument który podaje użytkownik, mówię o tym:

public Czas pomnoz(int ile) {
        int godziny = this.godz;
        int minuty = this.minuty;
        godziny *= 3; // Tu chodziło o użycie parametru ile
        minuty *= 3 // Tak samo
		...
        return new Czas(godziny, minuty);
}

W konstruktorze ze stringiem używasz sb1 do minut mimo że wprowadzasz rzeczy do sb2

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