Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

1

Wednesday, October 25th 2006, 1:26pm

Java Programm...Distanz Zeit Rechener

...kann mir hierbei bitte jemand helfen?

Erstelle ein Programm DistanzZeitRechner, welches für die eingegebene Distanz und die eingegebene Zeit folgendes errechnet und ausgibt:

Geschwindigkeit in km/h
Die Zeit pro km als Liste

Die Eingaben sollen beim Programmaufruf (als Parameter) möglich sein. Sofern keine Parameter übergeben wurden sollen diese Eingaben durch das Programm abgefragt werden.

Der Aufruf und die Ausgabe sollten ungefähr so aussehen:
Eingabe Distanz.....
Eingabe Zeit.....

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

2

Wednesday, October 25th 2006, 2:22pm

Ja klar, wir helfen dir gerne!
An welcher Stelle hast du denn das Problem?
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

3

Wednesday, October 25th 2006, 3:43pm

Hallo Markus,

das wäre wirklich super!
Ich weiß nicht so recht, wie ich die Durchschnittsgeschwindigkeit errechne! wenn meine Eingabe einmal die Distanz und einmal die benötigte Distanz dafür ist.
Zuerst möchte ich diese Zahlen auf meter bzw sekunden umrechenen.
Aber wie bekomme ich meine sekunden(Zeit) umgerechnet?
wenn die Eingabe z.B. 05:46:46 ist, wie rechen ich das dann um?
:(

Currywurst mit Pommes

Erfahrener Schreiberling

Posts: 438

Date of registration: Oct 14th 2002

4

Wednesday, October 25th 2006, 4:11pm

Schau dir mal die Klasse SimpleDateFormat an

http://java.sun.com/j2se/1.4.2/docs/api/…rmat.html#parse(java.lang.String, java.text.ParsePosition)

Da erzeugst du dann ein Object von und gibts als Paramter das Format an, in dem der Anwender die Zeit angibt.

SimpleDateFormat sdf = new SimpleDateFormat("k:m:s")

sdf.parse() erzeugt dann ein Object der klasse Date, mit dem du dann Stunde, Minute, etc. abfragen kannst.

Kannst natürlich auch den Benutzer dazu zwingen, die Angabe komplett in Minuten oder Sekunden zu machen. Dann reicht ein einfaches Integer.parse(...)

Bin etwas kurz angebunden...aber vielleicht hilfts ja.

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

5

Wednesday, October 25th 2006, 4:18pm

Quoted

Original von Tobi23
Ich weiß nicht so recht, wie ich die Durchschnittsgeschwindigkeit errechne!

Du nimmst die zurückgelegte Strecke und teilst diese durch die dafür benötigte Zeit ;)

Quoted

wenn meine Eingabe einmal die Distanz und einmal die benötigte Distanz dafür ist.

"benötigte Distanz"? Du meinst doch sicher benötigte Zeit, oder?

Quoted

Zuerst möchte ich diese Zahlen auf meter bzw sekunden umrechenen.
Aber wie bekomme ich meine sekunden(Zeit) umgerechnet?
wenn die Eingabe z.B. 05:46:46 ist, wie rechen ich das dann um?
:(


Der elegante Weg ist über das SimpleDateFormat, welches einen Post drüber schon verlinkt wurde. Eine andere Möglichkeit ist einfach, deinen Eingabestring selber zu zerlegen (mit der String Klasse) und das ganze manuell auszurechnen (bsp.: 3 Minuten = 3/60 = 0.2 etc... ;) )
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

Currywurst mit Pommes

Erfahrener Schreiberling

Posts: 438

Date of registration: Oct 14th 2002

6

Wednesday, October 25th 2006, 4:36pm

Oder den String unterteilen mit Pattern.compile(":").split(eingabe)

Oder so ähnlich :) Es gibt viele Möglichkeiten.

SimpleDateFormat hat die Beschränkung auf maximal 23 Stunden : 59 Minuten : 59 Sekunden

Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

7

Thursday, October 26th 2006, 1:50pm

Hallo,

zuerst mal vielen Dank für eure schnellen Antworten.
Das mit dem SimpleDateFormat hilft mir in meinen Augen nicht wirklich weiter, da es sehr umständlcih wird!
Ich hätte da eine Idee mit der Scanner Klasse, das dann ungefähr so aussieht:
inputString input = "";
Scanner s = new Scanner(input).useDelimiter("\\s*:\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
Dadurch kann ich in dem Wert (z.B. 05:25:24) die " : " nicht berücksichtigen und den den Wert dann anschließend in Sekunden umrechnen.
Liege ich hier falsch? Was meint ihr dazu? Bitte helft mir!
Danke

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

8

Thursday, October 26th 2006, 6:07pm

Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

Currywurst mit Pommes

Erfahrener Schreiberling

Posts: 438

Date of registration: Oct 14th 2002

9

Thursday, October 26th 2006, 7:14pm

Du siehst, es gibt viele Möglichkeiten :)

Die einfachste scheint mir mittlerweile die split Methode von der String klasse zu sein.

String eingabe = "11:22:33"

String[] werteAlsString = eingabe.split(":")

int stunden = Integer.parse(werteAlsString[0]);
int minuten =Integer.parse( werteAlsString[1]);
int sekunden = Integer.parse(werteAlsString[2]);

This post has been edited 1 times, last edit by "Currywurst mit Pommes" (Oct 27th 2006, 11:30am)


Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

10

Monday, October 30th 2006, 9:01am

Hallo,

vielen Dank. Habe es mit der Split-Methode wunderbar hin bekommen.
Ist eigentlcih gar nciht so schwer wenn man zuerst mal auf den richtigen weg gebracht wird.
Danke nochmals.

Jetzt hab ich leider nochmals eine frage an euch.
Ich sollte ein Programm schreiben, bei dem die Eingabe beim Programmaufruf als Parameter möglich sein soll, aber wenn kein Parameter übergeben wurde, soll eine Engabe durch das Programm abgefragt werden. Wie bekomme ich das hin? Mir ist Klar doch if bzw else, aber wie ich das genau schaffe, "da steh ich noch auf dem Schlauch!"
Hbat ihr mir hierfür noch einen Tipp?

serotonin

Trainee

Posts: 96

Date of registration: Oct 24th 2003

Occupation: was wohl?

11

Monday, October 30th 2006, 10:02am

Tipp: Mal in die API schaun API für JavaSE1.5, unter "all classes nach String suchen..
Dann mal schaun, was es für Funktionen gibt und durch schnelles überfliegen des Textes feststellen, dass man am besten überprüft, ob die Länge des Eingabestrings 0 ist.

Könnte sein, das die Eingabe aus char besteht, dann muss man sie in Strings umwandeln oder sich ne andere Möglichkeit ausdenken.. =)
"Data items tend to be like children; they enjoy hanging around in groups together."

This post has been edited 1 times, last edit by "serotonin" (Oct 30th 2006, 10:02am)


migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

12

Monday, October 30th 2006, 10:32am

Quoted

Original von Tobi23
Ich sollte ein Programm schreiben, bei dem die Eingabe beim Programmaufruf als Parameter möglich sein soll, aber wenn kein Parameter übergeben wurde, soll eine Engabe durch das Programm abgefragt werden. Wie bekomme ich das hin? Mir ist Klar doch if bzw else, aber wie ich das genau schaffe, "da steh ich noch auf dem Schlauch!"
Meinst du vielleicht so etwas wie das Folgende?

Source code

1
2
3
4
5
6
7
	public static void main(String[] args) {
		if (0 < args.length) {
			// irgendwas mit args[0] machen
		} else {
			// von der Tastatur lesen
		}
	}
tar: Anlegen eines leeren Archivs wird feige verweigert.

Sinan

Senior Schreiberling

  • "Sinan" is male

Posts: 1,021

Date of registration: Jul 5th 2003

Location: Malaga

Occupation: Senior Cloud Solution Engineer bei Oracle

13

Monday, October 30th 2006, 4:06pm

Quoted

Original von migu

Source code

1
if (0 < args.length)

oh Gott 8o
soll das

Source code

1
if(args.length > 0)

bedeuten?
migu migu, hast du es von irgendwoher kopiert?
es würde mich nicht wundern wenn du es immer so schreibst :D
With great power comes great responsibility

Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

14

Monday, October 30th 2006, 5:56pm

zuerst nochmals danke für alle die mir bis hierhin einen Rat hatten.

Aber nun mein Prob.
Vielleicht kann mir ja jemand helfen?

hier meine Aufgabe:

Erstelle ein Programm DistanzRechner, welches für die eingegebene Distanz und die eingegebene Zeit folgendes errechnet und ausgibt:

- Geschwindigkeit in km/h
- Pace in Minuten pro km
- Die Zeit pro km als Liste

Die Eingaben sollen beim Programmaufruf (als Parameter) möglich sein. Sofern keine Parameter übergeben wurden sollen diese Eingaben durch das Programm abgefragt werden

Verwende für die Liste der km-Zeiten möglichst ein Array für die km-Angaben und eines für die Zeiten.


Der Aufruf und die Ausgabe sollten ungefähr so aussehen:

... java DistanzRechner
Bitte geben Sie die Distanz in km ein:
21,1
Bitte geben Sie die Zeit (HH:MM:SS) ein:
1:59:47

Geschwindigkeit: 10,6 km/h
Pace: 5:40 Minuten / km
km-Durchgangszeiten:
km 1: 0:05:40
km 2: 0:11:20
km 3: 0:17:00
...
usw.

....gleich gehts weiter....

Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

15

Monday, October 30th 2006, 5:59pm

nun mein bisheriger Code:


import java.io.*;
import java.util.Scanner;
public class DistanzRechner{
public static void main (String[] args)throws IOException{



String eingabe;
int i,x;
double km,zeit;


if (args.length < 0) {
// eingabeKm = args[0]; //Eingabe für die Distanz
InputStreamReader eingabeKm = new InputStreamReader(System.in );

System.out.println("Bitte geben Sie die gelaufenen Kilometer ein: ");
km = eingabeKm.read(); // Seite 143
System.out.println("Die Eingabe war: " + km);
double m = km/1000;

String eingabeZeit = args[1]; // Eingabe für die Zeit
BufferedReader eingbaeStr2 = new BufferedReader(new InputStreamReader(System.in ) );
System.out.println("Bitte geben Sie die benötigte Zeit ein (HH:MM:SS): ");
zeit = eingabeZeit.readLine(); // Seite 145
System.out.println("Die Eingabe war: " + zeit);

}else { //von der Tastatur einlesen
for (i=0; i=args[0]; i++) {
eingabeStrKm = eingabeStrKm + args;
}
for (x=0; x=args[1]; x++) {
eingabeStrZeit = eingabeStrZeit + args[x];
}

System.out.println("Ihre eingabe der Kilometer: " + args[i]);
System.out.println("Ihre Eingabe der benötigten Zeit: "+ args[x]);

/* muss noch eingbaut werden
zeit = werteAlsString; // bsp. "11:22:33";

String[] werteAlsString = zeit.split(":");

int stunden = Integer.parse(werteAlsString[0]);
int minuten = Integer.parse(werteAlsString[1]);
int sekunden = Integer.parse(werteAlsString[2]);
*/
usw....

Komme leider noch nicht wirklich weiter....

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

16

Monday, October 30th 2006, 7:42pm

@ Sinan: Bin ich jetzt blöd oder war das ein Witz?
@ Tobi: Habe grade keine Zeit für deinen Code, aber es wäre schön, wenn du dein Problem präzisieren könntest, wo genau kommst du denn nicht weiter? Ein komplett fertiges Programm wirst du hier wohl nicht bekommen (und willst du sicher auch gar nicht ^^)
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

17

Tuesday, October 31st 2006, 7:48am

Ja, ich will bestimmt kein fertigen Code!!! Will ja schließlcih auch was dabei lernen.

Mein Problem ist das:

Verwende für die Liste der km-Zeiten möglichst ein Array für die km-Angaben und eines für die Zeiten.

Dazu muss ich ja 2 Arrays miteinander vergleichen und zum einen jeweils die Zeit/pro km wieder dazu addieren. Bekomm das irgendwie nicht richtig hin.

Habt Ihr da eine Idee?

Grüße Tobi

Currywurst mit Pommes

Erfahrener Schreiberling

Posts: 438

Date of registration: Oct 14th 2002

18

Tuesday, October 31st 2006, 7:22pm

Tobi, irgendwie musst du konkreter werden, wenn du eine Frage stellst.

Also konkret, was hast du bereits und wo genau brauchst du Hilfe.

Fehlt dir eine Idee für einen Algorithmus, hast du eine Frage zu Java, etc.

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

19

Tuesday, October 31st 2006, 10:43pm

Verstehe dein Problem auch nach wie vor nicht so ganz.
Wie ich das sehe, brauchst du doch nur ein Array mit der Länge der (abgerundeten) Kilometer. Dann schreibst du dort bei jedem Kilometer die Zeit hinein. Natürlich braucht man eigentlich ja gar kein Array, wenn man das ganze nur ausgeben will, und die Daten nicht weiter braucht (wenn ich das richtig sehe).

Also: Distanz und Zeit gegeben => Durschschnittsgeschwindigkeit.
Dann kann man für i = 1 bis Distanz (je nach Wunsch ab oder auf gerundet) die benötigte Zeit ausgeben.

Also zB: Distanz 20 km, Zeit 20 min => 60 km/h => 1 min pro km
also 1 km: 1 min
2. km = 2*1 min = 2 min.
3. km = 3*1 min ) 3 min ....
etc.
oder?!
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

Tobi23

Praktikant

  • "Tobi23" started this thread

Posts: 13

Date of registration: Oct 25th 2006

20

Thursday, November 2nd 2006, 8:06am

Hallo, ich weiß nicht genau, wie ich die zwei Arrays miteinander vergleichen kann!
Etwa so inder Art: Distanz=Zeit[n+i]?????