# Rechnen mit mehreren Variablen



## Basti82 (30. Dez 2010)

Hallo allerseits!

Ich habe ein kleines Problem beim rechnen mit 2 Variablen. 

Ich soll über Weihnachten für den Informatik-Unterricht einen Verbrauchsrechner programieren. Bis auf die eigentliche Berechnung ist auch schon (fast) alles fertig 

Geplant ist, die gefahrenen Km und die getankte Menge aus Textfeldern auszulesen und dann damit zu rechnen. mit einem ausgelesenen und einem fixen Wert klappt das auch wunderbar. Nur wenn mit 2 ausgelesenen Werten gerechnet werden soll, komt Müll raus.

Da meine Java-Kenntnisse nicht so prickelnd sind, wende ich mich vertrauensvoll an euch.  Ich befürchte fast, der Fehler ist so simpel wie einfach zu beheben. Ich komme nur nicht drauf. 

Die eigentliche Berechnung geht ab Zeile 204 los 


```
package Rechner;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
/*	
	Dies ist ein Programm zur Berechnung der Fachhochschulreife.
	Eine Gemeinschaftsproduktion von Grit Mikolascheck, Sebastian Bahr,
	Bernd Paulsen und Kristof Schlüßler
*/	
public class Verbrauchsrechner extends JFrame implements ActionListener
{
	private Font Schrift1;
	private JButton KnopfInformation;
	
	private JTextField tfAKZ;
	private JTextField tfLiter;
	private JTextField tfKM;

	private JButton KnopfBenzin;
	private JButton KnopfDiesel;
	private JButton KnopfVerbrauch;
	
	
	private String SKraftstoff;
	private String SAKZ, SKM, SLiter, SVerbr100;
	private int Verbr100laenge, iKM, iLiter;
	
	private boolean okVerbrauch = false;
	private boolean okKraftstoff = false;
	private boolean okKM = false;
	private boolean okLiter = false;
	private boolean okAKZ = false;
	
	double DKM;
	double DLiter;
	double DVerbr100;
		
	public Verbrauchsrechner()
	{	
		this.setLocation(0,0);
		this.setSize(800,640);
		this.setTitle("Verbrauchsrechner - Rechner");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
//		Das Null-Layout
		JPanel Platte = new JPanel();
		Platte.setLayout(null);

		Schrift1 = new Font("Arial",Font.BOLD,16);
		
//		Knopf: Information
		KnopfInformation = new JButton();
		KnopfInformation.setFont(Schrift1);
		KnopfInformation.setText("Hilfe");
		KnopfInformation.setLocation(625,35);
		KnopfInformation.setSize(100,30);
		KnopfInformation.setForeground(Color.RED);
		KnopfInformation.addActionListener(this);
		Platte.add(KnopfInformation);
		
		//1. Eingabefeld für amtl. Kennzeichen wird erzeugt
		JLabel TextAKZ = new JLabel();
		TextAKZ.setFont(Schrift1);
		TextAKZ.setText("1.  Bitte geben Sie das amtl. Kennzeichen ein");
		TextAKZ.setForeground(Color.BLACK);
		TextAKZ.setLocation(10,35);
		TextAKZ.setSize(600,20);
		Platte.add(TextAKZ);
		
		//Eingabe der AKZ.-Nr.
		tfAKZ = new JTextField();
		tfAKZ.setFont(Schrift1);
		tfAKZ.setLocation(30,60);
		tfAKZ.setSize(275,40);
		tfAKZ.setText("");
		Platte.add(tfAKZ);
		
//		Hinweistext Kraftstoffwahl
		JLabel Kraftstoff = new JLabel();
		Kraftstoff.setFont(Schrift1);
		Kraftstoff.setText("2. Kraftstoffwahl");
		Kraftstoff.setForeground(Color.BLACK);
		Kraftstoff.setLocation (10,120);
		Kraftstoff.setSize(600,20);
		Platte.add(Kraftstoff);

//      Button Verbrauch
		KnopfVerbrauch = new JButton();
		KnopfVerbrauch.setFont(Schrift1);
		KnopfVerbrauch.setText("Verbrauchsberechnung starten");
		KnopfVerbrauch.setLocation(350,540);
		KnopfVerbrauch.setSize(350,35);
		KnopfVerbrauch.setForeground(Color.BLUE);
		Platte.add(KnopfVerbrauch);
		KnopfVerbrauch.addActionListener(this);
		
	
//      Button Benzin
		KnopfBenzin = new JButton();
		KnopfBenzin.setFont(Schrift1);
		KnopfBenzin.setText("Benzin");
		KnopfBenzin.setLocation(30,155);
		KnopfBenzin.setSize(130,35);
		Platte.add(KnopfBenzin);
		KnopfBenzin.addActionListener(this);

//      Button Diesel
		KnopfDiesel = new JButton();
		KnopfDiesel.setFont(Schrift1);
		KnopfDiesel.setText("Diesel");
		KnopfDiesel.setLocation(200,155);
		KnopfDiesel.setSize(130,35);
		Platte.add(KnopfDiesel);
		KnopfDiesel.addActionListener(this);	
		
//		Hinweistext gefahrene Kilometer
		JLabel TextLKM = new JLabel();
		TextLKM.setFont(Schrift1);
		TextLKM.setText("3. Geben Sie die gefahrenen Kilometer (Punkt statt Komma) ein :");
		TextLKM.setForeground(Color.BLACK);
		TextLKM.setLocation(10,215);
		TextLKM.setSize(600,30);
		Platte.add(TextLKM);
		
		//Eingabe des Kennzeichens
		tfKM = new JTextField();
		tfKM.setFont(Schrift1);
		tfKM.setLocation(30,250);
		tfKM.setSize(275,40);
		tfKM.setText("");
		Platte.add(tfKM);
							
//		Hinweistext getankte Menge
		JLabel TextLLiter = new JLabel();
		TextLLiter.setFont(Schrift1);
		TextLLiter.setText("4. Geben Sie die getankte Menge in Litern (Punkt statt Komma) ein:");
		TextLLiter.setForeground(Color.BLACK);
		TextLLiter.setLocation(10,305);
		TextLLiter.setSize(600,30);
		Platte.add(TextLLiter);
		
		//Eingabe getankte Menge.
		tfLiter = new JTextField();
		tfLiter.setFont(Schrift1);
		tfLiter.setLocation(30,340);
		tfLiter.setSize(275,40);
		tfLiter.setText("");
		Platte.add(tfLiter);
		
//		Fixieren der Platte
		setContentPane(Platte);	
	}

	public void actionPerformed(ActionEvent Ereignis) 
	{
		Object Quelle = Ereignis.getSource();
		
		if (Quelle == KnopfInformation)
		{	
			JOptionPane.showMessageDialog(null, "Hallo!");
		}
		
		if (SAKZ != "")
		{
			okAKZ = true;
		}
		if (SKM != "")
		{
		okKM =true;
		}
		
		if (SLiter != "")
		{
		okLiter=true;
		}
		
		if (Quelle == KnopfBenzin)
	    {
	    	okKraftstoff=true;
	    	KnopfDiesel.setBackground(null);
	    	KnopfBenzin.setBackground(Color.yellow);
	    	SKraftstoff="Benzin";
	    }
			    
	    if (Quelle == KnopfDiesel)
	    {
	    	okKraftstoff=true;
	    	KnopfBenzin.setBackground(null);
	    	KnopfDiesel.setBackground(Color.yellow);
	    	SKraftstoff="Diesel";
		}
			   
		if (Quelle == KnopfVerbrauch)
		{
			{
			KnopfVerbrauch.setBackground(Color.yellow);
			okVerbrauch=okKraftstoff && okAKZ && okKM && okLiter;
			SAKZ=tfAKZ.getText();

			if (okVerbrauch)
			
				{
				 String SKM = tfLiter.getText();
				 String SLiter = tfLiter.getText();
				 double DKM = Double.parseDouble(SKM);
				 double DLiter = Double.parseDouble(SLiter);
				 
				 
				 DVerbr100=(DLiter/DKM)*100;
				// DVerbr100=Math.floor(DVerbr100*100+0.5)/100;	
				 SVerbr100=Double.toString(DVerbr100);
				// Verbr100laenge=SVerbr100.length();
				// if (SVerbr100.substring(Verbr100laenge-2,Verbr100laenge-1).equals("."))
				// SVerbr100=SVerbr100+"0";
				 JOptionPane.showMessageDialog(null, "Das Fz "+SAKZ+" verbrauchte "+SVerbr100+" Liter "+SKraftstoff+" auf 100 KM.");
				}
				else
				JOptionPane.showMessageDialog(null, "Da fehlt aber noch was!");
			}
		}	
	}
	public static void main(String[] args)
	{
		Verbrauchsrechner Rahmen = new Verbrauchsrechner();
		Rahmen.setVisible(true);
	}

}
```

vielen Dank schon mal und einen guten Rutsch!

Gruß Basti

PS. über die umständlich programmierten Teile darf gerne gelacht werden


----------



## Final_Striker (30. Dez 2010)

Ein Paar Konsolenausgaben der Zwischenwerte helfen in solchen Fällen ungemein. z.B. bei:


```
String SKM = tfLiter.getText();
                 String SLiter = tfLiter.getText();
                 double DKM = Double.parseDouble(SKM);
                 double DLiter = Double.parseDouble(SLiter);

                 System.out.println(DKM);
                 System.out.println(DLiter);
```


----------



## Basti82 (30. Dez 2010)

Danke für die Hilfe!

Jetzt hab ich's auch gesehen. 
Das war ja mal echt ein blöder Fehler. Jetzt klappts auch mit dem rechnen.

Gruß basti


----------

