Erste Schritte Arbeitszeit berechnen

M

MagicM

Gast
Hallo, ich habe hier die Aufgabe, ein Programm zu schreiben, dass die Arbeitszeit von Arbeitern nach Eingabe derselben in Form zweier Uhrzeiten berechnet.
Man gibt also beispielsweise ein "18:30 21:30"
Dazu kommen verschiedene Erschwernisse, beispielsweise, dass bei 8 Stunden Arbeitszeit 45 Minuten Pause abgezogen werden und bei 4 Stunden 30 Minuten.
Ausserdem kann die erste Zeit hinter der zweiten Zeit liegen, in dem Fall ist die erste Zeit auf den Vortag bezogen.

Mein Ansatz soweit sieht so aus:
Java:
package uebung1;

public class WorkingTime {
	public static void main(String[] args) {
		/* Don't modify the main-function! */

		/*
		 * times[][] contains the numbers given by the user: times[0][0] hour
		 * beginning times[0][1] minute beginning times[1][0] hour ending
		 * times[1][1] minute ending
		 */
		int[][] times = new int[2][2];
		double fullWork = 0;

		if (args.length == 2) {
			times = myTime(args[0], args[1]);
			if (times[0][0] == 0 && times[0][1] == 0 && times[1][0] == 0
					&& times[1][1] == 0) {
				fullWork = 0;
			} else {
				fullWork = myWorkingTime(times);
				System.out.println("You worked " + fullWork
						+ " hours this day!");
			}
		} else {
			System.out.println("Wrong number of arguments. sExpected: 2");
		}
	}

	private static int[][] myTime(String begin, String end) {
		int[][] wTime = new int[2][2]; // contains result of conversion of given
		String[] storestr=begin.split(":");
		wTime[0][0] = Integer.parseInt(storestr[0]);
		wTime[0][1] = Integer.parseInt(storestr[1]);
		storestr=end.split(":");
		wTime[1][0] = Integer.parseInt(storestr[0]);
		wTime[1][1] = Integer.parseInt(storestr[1]);
		//if (!(0<=wTime[0][0])<=23) || !(0<=wTime[1][0])<=23)) {myTime("00:00", "00:00")};
		//if (!(0<=wTime[0][1])<=59) || !(0<=wTime[1][1])<=59)) {myTime("00:00", "00:00")};
		return wTime;
	}

	private static double myWorkingTime(int[][] wTime) 
	{
		double diff, decBegin, decEnd;
		diff=0;
		if (wTime[0][0]<=wTime[1][0])
		                         {
									if (wTime[0][1]<=wTime[1][1])
									                   {
														decBegin=wTime[0][0]+(wTime[0][1]/60);
														decEnd=wTime[1][0]+(wTime[1][1]/60);
														
														diff=decEnd-decBegin;
									                   
														if (diff>4) 
														{if (diff>8) 
															diff=diff-0.75;
														else diff=diff-0.5;
														}
									                   }
									}
		else 
		{
			wTime[1][0]=wTime[1][0]+12;
			decBegin=wTime[0][0]+(wTime[0][1]/60);
			decEnd=wTime[1][0]+(wTime[1][1]/60);
			
			diff=decEnd-decBegin;
		}
									
		                        

		return diff; // result as decimal number
	}
}

Er funktioniert so nicht; nachdem ich erst mal ewig rumgemacht habe, um rauszufinden, wie ich das gut kompilieren kann, sagt er nun IMMER als Ergebnis 4.5 Stunden.
Ich selbst überblicke nicht genau, wo mein Fehler liegt und bin mir vor allem nicht sicher, ob ich das mit dem Parsen richtig gemacht habe. Habe mir das selbst aus einigem Mal googlen erschlossen, kann also durchaus falsch sein...

Kann mir hierbei jemand helfen?
Gruß, MM

PS: Ich habe praktisch keinerlei Vorkenntnisse in Java, aber kann ein wenig Delphi. Java allerdings ist schon recht anders und gefällt mir bisher eigentlich nicht so besonders...
 
M

Marcinek

Gast
ch würde damit anfangen in jedem zwischenschritt eine debugausgabe zu machen.

Alternativ naütrlich richtig zu debugen.
 

MarderFahrer

Gesperrter Benutzer
Also, in Zeile 47 beginnst zu mit dem Fall, dass die Beginn Stunden kleiner gleich den End Stunden sind.
So weit, so gut. Aber in Zeile 49 hast du definiert, dass die ganze Berechnung nur dann stattfindet, wenn die Beginn Minuten ebenfalls kleiner gleich den End Minuten sind.
Dies ergibt für mich keinen Sinn. Nehmen wir doch mal den Fall:
Beginn: 18:45
Ende: 21:30

Deine Berechnung würde korrekt beginnen. Mit dem Fall, dass die Beginn Stunden kleiner gleich den End Stunden sind. Danach würde dann aber gar nichts mehr berechnet, weil deine If Anweisung in Zeile 49 "false" ergeben wird, da "45" nicht kleiner gleich "30" ist.

Oh, und dass du immer 4.5 Stunden ausgegeben bekommst, kann ich ebenfalls nicht nachvollziehen. Lasse ich das Programm mit "18:30" "21:30" laufen, so bekomme ich als Ausgabe "You worked 3.0 hours this day!"
 
Zuletzt bearbeitet:

Neue Themen


Oben