Problem Java

03/28/2015 15:52 schneider00#1
Hey,

ich soll etwas kleines in Java schreiben was als Ergebnis die eingegebene Zeit in Minuten, Stunden etc ausgeben soll.

Das alles steht auch soweit allerdings wird mir als Ergebnis immer 0 ausgegeben.
Kann mir jemand sagen wo der Fehler liegt?

main.java
Code:
import java.util.Scanner;


public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Zeit3 Z3;
		Z3 = new Zeit3();
		
		Scanner sc = new Scanner (System.in);
		System.out.print("Geben Sie die Zeit in Sekunden ein: ");
		Z3.setSec(sc.nextDouble());
	    
		Z3.showTime();
		
		
		
		
		
		
		
		
	}	
}


Zeit3.java
Code:
public class Zeit3 {

	public double sekunde;
	public double minute;
	public double stunde;
	public double tage;
	
	

	
	public void setSec(double sekunde){
		if(sekunde > 0) {
			System.out.println("Ihr eingegebener Wert lautet in Sekunden: "+sekunde);
		}
		else {
			System.out.println("Sie haben keinen korrekten Wert eingegeben.");
			System.out.println("Das Programm beendet sich nun.");
			System.exit(0);
		}
	}


	public void showTime() {
		System.out.println("Die Zeit in Minuten lautet: "+(sekunde / 60));
		
	}
	
	

	
	


}
Danke schonmal :)
03/28/2015 16:04 dowhile#2
Du änderst das Attribut sekunde nie, es gibt kein sekunde = ...; das Sekunde auf einen Wert ungleich 0 setzen würde. In setSec() machst du eine Ausgabe, aber das Attribut veränderst du nicht.
Die Formel Minuten = 60 * Sekunden überdenke lieber nochmal.
03/28/2015 16:33 schneider00#3
Okay und auf was soll ich sekunde setzen und wo?

Danke schonmal
03/28/2015 18:07 Dantox#4
Deine Methode showTime() kennt deine Variable "sekunde" zwar, da es eine public-Variable in deiner "Zeit3"-Klasse gibt. Sie weiß aber >nicht< den Wert vom Scanner, und denkt "sekunde" ist immer noch Null, da du sie nirgends initialisierst bzw. übergibst. Bei der Methode setSec() übergibst du nämlich aus deiner Main-Klasse einen Wert, der Methode showTime() aber nicht.

Achja, die Formel lautet sekunde / 60, nicht sekunde * 60.
03/28/2015 18:29 schneider00#5
OK. Hab das Problem gelöst.

Habe den Code in der main.java nun so geschrieben:

Code:
import java.util.Scanner;


public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Zeit3 Z3;
		Z3 = new Zeit3();
		
		Scanner sc = new Scanner (System.in);
		System.out.print("Geben Sie die Zeit in Sekunden ein: ");
		double sekundeE = sc.nextDouble();
		
		
		
		Z3.setSec(sekundeE);
	    
		Z3.showTime(sekundeE);
		
		
		
	}	
}
Habs einfach in ne Variable gespeichert und in die beiden setSec und showTime weitergegeben.
03/28/2015 18:34 dowhile#6
Dir ist nun aber bewusst, dass setSec() nur eine Ausgabe macht, also die Attribute von Z3 überhaupt nicht beeinflusst. showTime() würde ohne den Aufruf von setSec() davor genau gleich funktionieren.
Was du vermutlich möchtest: setSec() soll das Attribut sekunde auf den Wert setzen, den du setSec() übergibst, und showTime() soll dann eine Ausgabe basierend auf dem Wert vom Attribut sekunde machen. Das geht so:
Code:
public class Zeit {

  // das ist ein Attribut
  private double sekunden;

  // methode setSekunden erwartet einen Wert vom Typ int
  public void setSekunden(double pSekunden) {
    // jetzt gibt es zwei Variablen, sekunden und pSekunden
    // sekunden ist ein Attribut, und wir können in jeder Methode der Klasse auf sekunden zugreifen
    // pSekunden ist ein Parameter dieser Methode, und wir können nur in dieser Methode darauf zugreifen
    sekunden = pSekunden; // <-- jetzt bekommt das Attribut sekunden den Wert von pSekunden
  }

  public void showTime() {
    // hier nutzen wir sekunden, brauchen also keinen Parameter
    // vor dieser Methode muss setSekunden() aufgerufen werden, denn sonst ist das Attribut sekunden noch 0 (Standardwert für Attribute vom Typ int)
    int minuten = (int) (sekunden / 60); // das (int) davor schneidet die Kommastellen ab, so dass
    // minuten also zum Beispiel 5 statt 5.4813782 ist
    System.out.println("Minuten: " + minuten);
  }
}
Nutzen kannst du das wie gehabt:
Code:
public class Main {

  private static void main(String[] args) {
    Zeit zeit = new Zeit(); 
    Scanner scanner = new Scanner(System.in);
    double sekunden = scanner.nextDouble();

    zeit.setSekunden(sekunden); // wichtig, damit setzen wir also das Attribut der Klasse, das wir dann ...
    zeit.showTime(); // ... hier verwenden
  }
}
03/28/2015 20:09 Zunft#7
Du könntest alternativ im Konstruktor der Klasse Zeit3 die Zeit übergeben.

Code:
public class Zeit3
{
double sekunde;

public Zeit3(double sekunde)
{
this.sekunde = sekunde;
}

public void print()
{
System.out.println(String.valueOf(sekunde));
}
}
Code:
Zeit3 Z3;	
Scanner sc = new Scanner (System.in);
System.out.print("Geben Sie die Zeit in Sekunden ein: ");
double sekundeE = sc.nextDouble();

Z3 = new Zeit3(sekundeE);
		
Z3.print();
03/29/2015 22:23 NotEnoughForYou#8
oder am besten die toString-Methode überschreiben.
03/29/2015 22:43 snow#9
#moved