Meine erste Java Programmierung funzt nicht :-(

Status
Nicht offen für weitere Antworten.

Murmeltier1985

Aktives Mitglied
Hallo, bin gerade dabei eine Aufgabe zu programmieren und komme einfach nicht weiter. Versteh nicht, wo der Fehler liegt. Kann mir vielleicht jemand helfen? Wäre wirklich sehr nett

Aufgabe: Bei Ratenzahlungen zahlt man oft mehr, als wenn man direkt vorab einen Gesamtpreis bar bezahlt. Schreiben Sie ein Programm, welches vier Zahlen in der unten angegebenen Reihenfolge als Parameter beim Programmstart aus der Konsole übergeben bekommt:
 Gesamtpreis bei Barzahlung
 Anzahlung bei Ratenzahlung
 Rate pro Monat bei Ratenzahlung
 Laufzeit in Monaten bei Ratenzahlung
Das Programm soll die Differenz zwischen Barzahlungspreis und Gesamtpreis bei Ratenzahlung ausgeben. Ebenfalls soll berechnet werden, bei welchen Raten man keinen Verlust/keinen Gewinn machen würde. Die Ergebnisse der Berechnungen müssen
auf 2 Nachkommastellen gerundet auf der Konsole ausgegeben werden.

Mein Ergebnis bisher:

Java:
import javax.swing.JOptionPane;

public class InstallmentCalculator {

		public static void main(String[] args) {
	
		
			
		double Gesamtpreis ;
		double Anzahlung ;
		double RateProMonat ;
		double LaufzeitInMonaten ; 
		double Differenz ;
		double DifferenzBarzahlungZuRatenzahlung ;
		String Hauptfrage1, Unterfrage1;	
		
		Gesamtpreis = Double.parseDouble(JOptionPane.showInputDialog("Gesamtpreis"));
		Anzahlung = Double.parseDouble(JOptionPane.showInputDialog("Anzahlung"));	
		RateProMonat = Double.parseDouble(JOptionPane.showInputDialog("Rate pro
                         Monat"));
		LaufzeitInMonaten = Double.parseDouble(JOptionPane.showInputDialog("Laufzeit in
                         Monaten"));
			
		Hauptfrage1 = JOptionPane.showInputDialog("Was soll errechnet werden?\n 
                                          Differenz Barzahlung zu Ratenzahlung? (1)\n
                                         Ab welcher Ratenhöhe pro Monat macht man keinen Verlust mehr? (2)");
			
			if (Hauptfrage1.equals("1")) 
			{
                                          while (Gesamtpreis > Anzahlung)
				{	
				Differenz = Gesamtpreis - RateProMonat * LaufzeitInMonaten;
				DifferenzBarzahlungZuRatenzahlung = Differenz								
							}

		System.out.println("Die Differenz beträgt:" DifferenzBarzahlungZuRatenzahlung);


Kann mir jemand helfen? Vielen Dank schonmal (Achso, ich weiß, dass noch der zweite Teil der Aufgabe fehlt, würde es dann aber genauso machen wie Teil 1)


Danke Sarah
 
Zuletzt bearbeitet von einem Moderator:
[JAVA=31]while (Gesamtpreis > Anzahlung)
[/code]
Die while Schleife ist falsch und überflüssig, da der Gesamtpreis i.d.R. (;-)) immer grösser ist als die Anzahlung, hast Du hier eine Endlosschleife.
die Differenz berechnet sich aus:
Code:
Anzahlung + RateProMonat * LaufzeitInMonaten - Gesamtpreis
(der eigentlich Barpreis heissen sollte) ohne Schleife drumrum.

P.S. Variablennamen schreibt man in JAVA eigentlich klein RateProMonat --> rateProMonat
 
Schonmal vielen Dank, hab jetzt alles geändert, bekomme aber trotzdem noch eine Fehlermeldung:

Java:
currentPost.edit();

import javax.swing.JOptionPane;

public class InstallmentCalculator {

		public static void main(String[] args) {
	
		
			
		double barpreis ;
		double anzahlung ;
		double rateProMonat ;
		double laufzeitInMonaten ; 
		double differenz ;
		double differenzBarzahlungZuRatenzahlung ;
		String Hauptfrage1, Unterfrage1;	
		
		barpreis = Double.parseDouble(JOptionPane.showInputDialog("Barpreis"));
		anzahlung = Double.parseDouble(JOptionPane.showInputDialog("Anzahlung"));	
		rateProMonat = Double.parseDouble(JOptionPane.showInputDialog("Rate pro Monat"));
		laufzeitInMonaten = Double.parseDouble(JOptionPane.showInputDialog("Laufzeit in Monaten"));
			
			Hauptfrage1 = JOptionPane.showInputDialog("Was soll errechnet werden?\n Differenz Barzahlung zu Ratenzahlung? (1)\n Ab welcher Ratenhöhe pro Monat macht man keinen Verlust mehr? (2)");
			
			if (Hauptfrage1.equals("1")) 
			{
							
								differenz = anzahlung + rateProMonat * laufzeitInMonaten - barpreis ;
																
							}
						System.out.println("Die Differenz beträgt:" differenz); }}

Und zwar unterstreicht er mir immer die differenz aus syso.

Fehlermeldung: Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error on token "differenz", delete this token
 
Zuletzt bearbeitet von einem Moderator:
was machst du denn immer für Code-Postings mit currentPost.edit(); drin und falschen Tags?
bitte editiere dein Posting, schaue das ganz oben an für richtige Tags (Zitieren)

wenn du den Code aus einer Entwicklungsumgebung oder so kopierst, dann füge ihn vielleicht erstmal in einem normalen Text-Editor ein
oder schaue dir genau an, was hier im Anworten-Fenster reinkommt

----

+ differenz
statt
differenz
 
sorry, ist leider alles nicht so meine Welt. Hab versucht das so zu posten wie es ganz oben unter Java-Quelltext steht... aber ich versuch das jetzt mal zu verstehen mit dem richtigen posten...
 
[c][ JAVA]currentPost.edit();[/code][/c] bedeutet natürlich [c][ java]Dein Quellcode kommt hier zwischen[/code][/c]
 
na Code eben,
hast du doch bisher mehr oder weniger auch schon richtig, nur die Tags drumherum besser machen
 
Falls du noch nicht herausgefunden hast wieso du eine Exception bekommst:

Java:
System.out.println("Die Differenz beträgt:" differenz); }}

da fehlt ein + zwischen dem String und differenz.
 
Danke, jetzt kann ich wenigstens schon posten. Hab jetzt alle eure Änderungen aufgenommen, bekomme aber trotzdem noch Fehlermeldungen. Hab das Programm jetzt auch komplett fertig gemacht. Vielen Dank für eure Hilfe

Java:
 import javax.swing.JOptionPane;

public class InstallmentCalculator {

		public static void main(String[] args) {
	
		
			
		double barpreis ;
		double anzahlung ;
		double rateProMonat ;
		double laufzeitInMonaten ; 
		double differenz ;
		double keinenVerlustMehrUnter ;
		
		String Hauptfrage1, Unterfrage1;	
		
		barpreis = Double.parseDouble(JOptionPane.showInputDialog("Barpreis"));
		anzahlung = Double.parseDouble(JOptionPane.showInputDialog("Anzahlung"));	
		rateProMonat = Double.parseDouble(JOptionPane.showInputDialog("Rate pro Monat"));
		laufzeitInMonaten = Double.parseDouble(JOptionPane.showInputDialog("Laufzeit in Monaten"));
			
			Hauptfrage1 = JOptionPane.showInputDialog("Was soll errechnet werden?\n Differenz Barzahlung zu Ratenzahlung? (1)\n Ab welcher Ratenhöhe pro Monat macht man keinen Verlust mehr? (2)");
			
			if (Hauptfrage1.equals("1")) 
			{
							
								differenz = anzahlung + rateProMonat * laufzeitInMonaten - barpreis ;
																
			}
					
			System.out.println("Die Differenz beträgt:" + differenz); }
		
		  

                                            if (Hauptfrage1.equals("2"))
                                            {  

            	 	                       			keinenVerlustMehrUnter = barpreis / laufzeitInMonaten ;
            	 				
                                             }
                                            
             			                     System.out.println("Man macht keinen Verlust mehr bei einer monatlichen Rate unter:" + keinenVerlustMehrUnter); }}

Fehler: Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error on token "}", { expected after this token

at InstallmentCalculator.main(InstallmentCalculator.java:32)
 
Achja, und das mit dem runden von den double Zahlen auf 2 Stellen nach dem Komma wollte ich mit folgendem Befehl machen:

" * 100, floor, * 100".

Geht das denn? Und wo muss ich das einbauen?

Ich weiß theoretisch nur, dass ich die Zahl wohl mit 100 multiplizieren muss um dann zu runden und dann wieder durch 100 teilen. Oder?
 
> Syntax error on token "}"
steht für Probleme mit Anfang/ Ende von Methoden, Klassen oder auch kleinen if-Blöcken,

das } in Zeile 32 hinter
System.out.println("Die Differenz beträgt:" + differenz);
beendet hier die main-Methode,

danach darf vielleicht eine neue Methode anfangen, das if in Zeile 36 geht jedenfalls gar nicht,

----
runden kann man so machen, ja,
schreibe dir eine Methode public double runde(andererDouble),
Aufruf sollte doch klar sein, genau da wo gerundet werden soll
 
ganz einfach... wenn man eine Klammer aufmacht, muss man sie auch wieder zumachen... da brauchst du nicht in einem Forum fragen... zähl dein { und zähl dein } Ist die Anzahl unterschiedlich ist was falsch...
 
Nabend,

was mir noch aufgefallen ist, falls du die Aufgabe abgeben musst, oder sie eben wirklich richtig machen willst:

Es ist gefordert, dass die 4 Zahlen als Parameter beim Konsolenaufruf übergeben werden, also brauchst du gar kein JOptionPane, ist also eigentlich einfacher.

MfG Matthis
 
🙁 jetzt wirklich? Und ich setzt mich da 5 Stunden dran... wie geht es denn einfacher? Ich dachte "Parameter übergeben" heißt, dass der Nutzer die Eingabe machen muss...

Kann mir jemand erklären, was Parameter sind?

Danke Sarah
 
deine main methode hat den paramter [c]String[] args[/c]

wenn du jetzt dein programm mittels
java InstallmentCalculator aufrufst, kannst du ihm halt werte übergeben

java InstallmentCalculator wert1 wert2 wert3 wert4

diese 4 werte stehen dann im string array args.

mittels args[0];
args[1] ... gelangst du an diese werte.

und bevor jetzt die nächste frage kommt: die paramter kann man auch in den entwicklungsumgebungen einstellen(eclipse: Run -> Run Configurations -> Arguments)
 
Bin 24 und nein, trotz abi und studium war mir nicht geläufig was Parameter bei der Programmierung bedeuten. Aber danke eRaaaa für die Info. Programmierung ist halt ne recht spezielle Sache wie ich finde und manchen liegt es und manchen nicht. Und obwohl ich recht gut in Mathe bin, hab ich recht viele Probleme in Java, ist für mich halt nicht sehr logisch. Aber da muss ich wohl durch.
 
Hallo, muss jetzt leider nochmal nachfragen, hab jetzt die komplette Aufgabe nochmal neu gemacht, da ich es ja anscheinend zu kompliziert gelöst habe, jetzt funzt aber leider nichts mehr, kann mir nochmal wer auf die Sprünge helfen? Bin euch echt dankbar

[JAVA=42]public class InstallmentCalculator1 {

public static void main(String[] args){

double barPreis = 500;
double anzahlung = 100;
int laufzeit = 10;
double rateProMonat = 50;

double differenz = anzahlung + rateProMonat * laufzeit - barPreis
double keinenVerlustMehrUnter = barPreis / laufzeit;

differenz = Math.round(differenz*100)/100

System.out.println("Differenz zwischen Barpreis und Ratenzahlung: " + (differenz) + " Euro");
}
[/code]

Fehlermeldung: Server Error, the selection did not containany resources that can run on a server.
 
woraus besteht denn dein 'Launch'?
welches Konsolenkommando oder welche Aktionen in welcher IDE?

die Fehlermeldung läßt darauf schließen, dass du nicht InstallmentCalculator1 startest, denn da gibt es eigentlich eine main
 
Was sagst du dazu? Ist zwar mit "GUI", aber ich finds schöner so.


Java:
import javax.swing.JOptionPane;
import javax.swing.JFrame;

public class Main {
    public static void main(String[]Args) {

        double preisBarzahlung = 0;
        double ratenAnzahlung = 0;
        double rate = 0;
        double laufzeit = 0;
        double differenz = 0;
        double absdifferenz = 0;
        double preisRatenzahlung = 0;
        String waehrung = "Währungseinheiten";

        waehrung = (
                JOptionPane.showInputDialog("Landeswährung: ")
                );
        waehrung = " " + waehrung;
        preisBarzahlung = Double.parseDouble(
                JOptionPane.showInputDialog("Barzahlungspreis: ")
                );
        ratenAnzahlung = Double.parseDouble(
                JOptionPane.showInputDialog("Anzahlung für Raten: ")
                );
        rate = Double.parseDouble(
                JOptionPane.showInputDialog("Rate pro Monat: ")
                );
        laufzeit = Double.parseDouble(
                JOptionPane.showInputDialog("Laufzeit in Monaten: ")
                );

        preisRatenzahlung = ratenAnzahlung + laufzeit * rate;
        differenz = preisRatenzahlung - preisBarzahlung;

        JFrame frame = new JFrame("Program output:");

//        JOptionPane.showMessageDialog(frame,
//                "Berechnung erfolgt für X mit einem Barzahlungspreis " +
//                "von " + preisBarzahlung + waehrung +
//                ", \nbei einer Anzahlung von " + ratenAnzahlung + waehrung +
//                " und einer Laufzeit von " + laufzeit +
//                " zu einer monatlichen Rate von " + rate + waehrung + ",\n " +
//                "was einem Gesamtratenzahlungspreis von " + preisRatenzahlung +
//                waehrung + "entspricht.");

        if (differenz > 0) {
            JOptionPane.showMessageDialog(frame,
                    "Barzahlung kommt billliger, " +
                    "und zwar um " + differenz + waehrung + ".");
        }
        else if (differenz < 0) {
            absdifferenz = Math.abs(differenz);
            JOptionPane.showMessageDialog(frame,
                    "Ratenzahlung kommt billiger, " +
                    "und zwar um " + absdifferenz + waehrung + ".");
        }
        else if (differenz == 0) {
            JOptionPane.showMessageDialog(frame,
                    "Kommt beides gleich teuer, " +
                    "Differenz beträgt " + differenz + waehrung + ".");
        }
        else {
            JOptionPane.showMessageDialog(frame, "Failure in line 67.");
            System.exit(1);
        }

        System.exit(0);
    }
}
 
Ich glaub Du brauchst mal jemanden der sich neben Dich setzt und alles in Ruhe erklärt.. da sind ja viel zu grosse Wissenslücken, als das man da hier gross weiterhelfen könnte.
 
Hallo, sooooooo... nach dem ich zwischenzeitlich erfahren habe, dass ich die Aufgabe ja komplett falsch angegangen bin, da ich das ja über die konsole und nicht über eclipse laufen lassen muss, hab ich jetzt eine Version die auch einigermaßen läuft :

Java:
public class InstallmentCalculator {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		double barpreis = Double.parseDouble(args[0]); //Übergebene Parameter von String
		double anzahlung = Double.parseDouble(args[1]); //in Double konvertieren (zum rechnen)
		double rate = Double.parseDouble(args[2]);
		double laufzeit = Double.parseDouble(args[3]);
		

		double differenz = anzahlung + rate * laufzeit - barpreis ;
		double keinenVerlustMehrUnter = barpreis / laufzeit ;

		System.out.println("Differenz zwischen Barpreis und Ratenzahlung:  " + differenz + " Euro");

		System.out.println("Man macht keinen Verlust mehr bei einer monatlichen Rate unter:  " + keinenVerlustMehrUnter + "Euro");
	}

}


So nun meine letzte Frage.... ich muss das ja noch auf 2 stellen nach dem Komma runden, wollte ich mit folgendem Befehl machen: java.lang.Math.round(differenz*100.) / 100.; machen.
Kann mir bitte jemand sagen, wo genau ich den Befehl platzieren muss????
Lass euch dann auch in Ruhe, danke Sarah
 
vllt direkt nach differenz? 😀

Java:
		double differenz = anzahlung + rate * laufzeit - barpreis;
		differenz = java.lang.Math.round(differenz*100.) / 100.;

wobei ich persönlich lieber intern mit allen nachkomma-stellen rechne würde, und nur bei der string ausgabe die nachkommastellen abschneiden würde

Java:
		System.out.println("Differenz zwischen Barpreis und Ratenzahlung:  "
				+ String.format("%.2f", differenz) + " Euro");
(hier spielts wohl keine rolle)
 
Vielen Dank. Meine Variante sieht nun so aus, wenn ich aber einen Funktionstest starte, bekomme ich immernoch Fehlermeldungen. Falls Freitagabend noch irgendjemand so freundlich wäre, sich meine Programmierung anzuschauen währe ich echt unendlich dankbar... Sitz da jetzt schon echt 7 Tage dran, und ich weiß, dass es echt ne einfache Aufgabe ist. Laut Fehlermeldung soll es wohl nicht der gestellten Aufgabe entsprechen und die Berechnungen stimmen nicht. Aber wenn ich Beispielzahlen eingebe funktioniert es... Komische Sache das Programmieren ???:L

Java:
public class InstallmentCalculator {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		double barpreis = Double.parseDouble(args[0]); //Übergebene Parameter von String
		double anzahlung = Double.parseDouble(args[1]); //in Double konvertieren (zum rechnen)
		double rate = Double.parseDouble(args[2]);
		double laufzeit = Double.parseDouble(args[3]);
		

		double differenz = anzahlung + rate * laufzeit - barpreis ; //Rechenschritte
		differenz = java.lang.Math.round(differenz*100.) / 100.; //Runden
		
		
		double keinenVerlustMehrUnter = barpreis / laufzeit ; //Rechenschritte
		keinenVerlustMehrUnter = java.lang.Math.round(keinenVerlustMehrUnter*100.) / 100.; //Runden
		

		System.out.println("Differenz zwischen Barpreis und Ratenzahlung:  " + differenz + " Euro"); //Ausgabe

		System.out.println("Man macht keinen Verlust mehr bei einer monatlichen Rate unter:  " + keinenVerlustMehrUnter + "Euro");
	}

}
 
Ich konnte 3 Funktionstest machen:
1) Syntax-Test: Überprüft ob der Quellcode ein gültiges Java-Programm ist.
2)Berechnungstest 1: Überprüft ob das Programm die richtigen Berechnungen durchführt und die richtigen Ergebnisse ausgibt.
3)Berechnungstest 2: Überprüft ob das Programm die richtigen Berechnungen durchführt und die richtige Ausgabe mit zwei Dezimalstellen erzeugt.

Leider kann ich die tests nur einmal durchführen und alle 3 waren falsch. Versteh ich aber nicht wirklich. Eine direkte Fehlermeldung gabs auch nicht :-(
 
habs geändert:

Java:
public class InstallmentCalculator {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		double barpreis = Double.parseDouble(args[0]); //Übergebene Parameter von String
		double anzahlung = Double.parseDouble(args[1]); //in Double konvertieren (zum rechnen)
		double rate = Double.parseDouble(args[2]);
		double laufzeit = Double.parseDouble(args[3]);
		

		double differenz = (anzahlung + (rate * laufzeit)) - barpreis; //Rechenschritte
  		differenz = java.lang.Math.round(differenz*100.) / 100.; //Runden
		
		
		double keinenVerlustMehrUnter = barpreis - anzahlung) / laufzeit; //Rechenschritte
		keinenVerlustMehrUnter = java.lang.Math.round(keinenVerlustMehrUnter*100.) / 100.; //Runden
		

		System.out.println("Differenz zwischen Barpreis und Ratenzahlung:  " + differenz + " Euro"); //Ausgabe

		System.out.println("Man macht keinen Verlust mehr bei einer monatlichen Rate unter:  " + keinenVerlustMehrUnter + "Euro");
	}

}
 
Java:
		double keinenVerlustMehrUnter = barpreis - anzahlung) / laufzeit; //Rechenschritte

Da fehlt aber noch eine Klammer auf ;-)

Edit: Ein gültiges Java-Programm ist es ja eigentlich, es lässt sich ja ohne Fehler kompilieren. Kann es sein dass du eine Klasse schreiben solltest in der es eine bestimmte Methode geben sollte, z.B. calculate(a,b,c,d), wobei diese Methode dann von deinem Funktionstest aufgerufen wird? Das würde dann erklären, wieso alle drei Tests fehl geschlagen sind.
 
Zuletzt bearbeitet:
Das mit der Klammer hab ich geändert... Danke.
Die Aufgabenstellung hab ich als erstes gepostet. Meinst du ich hätte es anders machen sollen?
Ich kann unter cmd das programm auch nicht aufrufen, bekomme immer: javac: file not found.
Obwohl ich mir ganz sicher bin das ich im richtigen Verzeichnis bin und mich nicht verschrieben habe.
 
javac file not found? findet er denn überhaupt das Programm javac?

Versuch mal in der cmd in das Verzeichnis zu wechseln in dem deine *.java Datei liegt. Anschließend gibst du dort ein: c:\Programme\Java\jdk1.6.0_14\bin\javac InstallmentCalculator.java

Wobei du den Pfad so anpassen musst, dass er deiner Java-Installation entspricht...

Nach der Aufgabenstellung zu urteilen, die du Anfangs gepostet hast, sieht dein Programm richtig aus. Allerdings habe ich keine Ahnung wie die Funktionstests aufgebaut sind. Die müssen ja erstmal dein Programm finden und mit den entsprechenden Parametern aufrufen und anschließend das Ergebnis auslesen um es zu vergleichen...

Edit: Übrigens wird mit dem javac-Befehl das Programm nur kompiliert. Aufrufen kannst du es dann mit <Java-Pfad>\bin\java InstallmentCalculator <und hier die vier parameter>

Edit2: javac wird natürlich gefunden, dachte an eine andere Fehlermeldung 😛 hab zu lange nichts mehr mit Java in der cmd gemacht *g*, aber für den Programmaufruf sollte das oben beschriebene immer noch richtig sein...
 
Zuletzt bearbeitet:
Vielen Dank. Ich denke auch, dass die aktuelle Version der Aufgabe entspricht. Werde es so hochladen. Hast mir wirklich sehr geholfen, danke
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben