# da passt was nich...



## imal (13. Mrz 2012)

(nachdems erst in der falschen rubrik gelandet ist, hier nochmal)
heyho.
vorab: nicht lachen, ich schreibe jetzt seit ein paar stunden java (gestern abend angefangen). hab dem entsprechend nicht wirklich eine ahnung davon wie sich was vereinfachen lässt o.ä.
ich habe mich an ein paar hausaufgaben versucht, die ein bekannter im studium bearbeitet und hänge gerade an einer aufgabe:

Aufgabe 12: Die Kraftfahrzeug-Steuer für Personenkraftwagen berechnet sich zurzeit
gemäß der folgenden Tabelle:
Abgasnorm          Otto-Motor                                           Diesel-Motor
                           je angefangene 100cm³ Hubraum         je angefangene 100cm³ Hubraum
Euro-3                 6,75€                                                 15,44€
Euro-2                 7,36€                                                 16,05€
Euro-1                 15,13€                                                27,35€

Die entstehenden Beträge werden auf volle Euro-Beträge abgerundet. 
Beispielsweise ergibt sich für einen PKW mit einem Otto-Motor und 1591 cm3 Hubraum, 
der die Abgasnorm „Euro-2“ erfüllt,
16 · 7,36 € = 117,76 €.
Die Steuerschuld für dieses Fahrzeug beträgt demzufolge 117,– € pro Jahr.
Schreiben Sie ein Java-Programm, das die Kraftfahrzeug-Steuer für Personenkraftwagen
gemäß obiger Tabelle berechnet. Der Dialog soll folgendermaßen ablaufen:
Bitte geben Sie die Abgasnorm ein: 2
Bitte geben Sie den Hubraum ein: 1591
Bitte geben Sie den Fahrzeugtyp ein: O
Die Steuerschuld beträgt 117 Euro pro Jahr.
Für ein Fahrzeug mit einem Otto-Motor soll der Buchstabe O eingegeben werden, für ein
Diesel-Fahrzeug ein D.

ich hab mir dann folgendes zusammengeschustert:
(ich schätze mal, das mit den doubles war eine dumme, unnötige idee, allerdings wurden mir die ausgaben beim ersten versuch als fehler angegeben und so hab ich versucht das ganze zu bereinigen. eigendlich sollte in den ausgaben direkt gerechnet werden)


```
import java.util.Scanner;
public class Aufgabe12 {
	public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	System.out.println("Bitte geben Sie die Abgasnorm ein:");	
	int a = sc.nextInt();
	System.out.println("Bitte geben Sie den Hubraum ein:");
	int b = sc.nextInt();
	System.out.println("Bitte geben Sie den Fahrzeugtyp ein:");
	char c = sc.nextInt();
	double q = (b / 100) * 15.13;
	double r = (b / 100) * 27.53;
	double s = (b / 100) * 7.36;
	double t = (b / 100) * 16.05;
	double u = (b / 100) * 6.75;
	double v = (b / 100) * 15.44;
		if (a = 1) {
			if (c = O) {
			System.out.println("Die Steuerschuld betraegt "+q+"Euro pro Jahr");
			}
			if (c = D) {
			System.out.println("Die Steuerschuld betraegt "+r+"Euro pro Jahr");
			}

			else {
			System.out.println("Eingabe nicht korrekt.");
			}

		}
		if (a = 2) {
			if (c = O) {
			System.out.println("Die Steuerschuld betraegt "+s+"Euro pro Jahr");
			}			
			if (c = D) {
			System.out.println("Die Steuerschuld betraegt "+t+"Euro pro Jahr");
			}

			else {
			System.out.println("Eingabe nicht korrekt.");
			}

		}
		if (a = 3) {
			if (c = O) {
			System.out.println("Die Steuerschuld betraegt "+u+"Euro pro Jahr");
			}
			if (c = D) {
			System.out.println("Die Steuerschuld betraegt "+v+"Euro pro Jahr");		
			}

			else {
			System.out.println("Eingabe nicht korrekt.");
			}

		}
		
		if (a < 3) {
		System.out.println("Eingabe nicht korrekt.");
		}
		if (a > 1) {
		System.out.println("Eingabe nicht korrekt.");
		}
	}
}
```

Fehlermeldungen sind:

Aufgabe12.java:10: possible loss of precision
found   : int
required: char
	char c = sc.nextInt();
	                   ^
Aufgabe12.java:17: incompatible types
found   : int
required: boolean
		if (a = 1) {
		      ^
Aufgabe12.java:18: cannot find symbol
symbol  : variable O
location: class Aufgabe12
			if (c = O) {
			        ^
Aufgabe12.java:18: incompatible types
found   : char
required: boolean
			if (c = O) {
			      ^
Aufgabe12.java:21: cannot find symbol
symbol  : variable D
location: class Aufgabe12
			if (c = D) {
			        ^
Aufgabe12.java:21: incompatible types
found   : char
required: boolean
			if (c = D) {
			      ^
Aufgabe12.java:30: incompatible types
found   : int
required: boolean
		if (a = 2) {
		      ^
Aufgabe12.java:31: cannot find symbol
symbol  : variable O
location: class Aufgabe12
			if (c = O) {
			        ^
Aufgabe12.java:31: incompatible types
found   : char
required: boolean
			if (c = O) {
			      ^
Aufgabe12.java:34: cannot find symbol
symbol  : variable D
location: class Aufgabe12
			if (c = D) {
			        ^
Aufgabe12.java:34: incompatible types
found   : char
required: boolean
			if (c = D) {
			      ^
Aufgabe12.java:43: incompatible types
found   : int
required: boolean
		if (a = 3) {
		      ^
Aufgabe12.java:44: cannot find symbol
symbol  : variable O
location: class Aufgabe12
			if (c = O) {
			        ^
Aufgabe12.java:44: incompatible types
found   : char
required: boolean
			if (c = O) {
			      ^
Aufgabe12.java:47: cannot find symbol
symbol  : variable D
location: class Aufgabe12
			if (c = D) {
			        ^
Aufgabe12.java:47: incompatible types
found   : char
required: boolean
			if (c = D) {
			      ^
16 errors
___________________________________________________
ich hoffe es ist für irgendjemanden möglich da mal drüber zu schauen und mir den ein oder anderen tip zu geben.
mit den fehlermeldungen komm ich leider nicht weiter und soweit, dass ich das irgendwie einfacher hinbekomm, bin ich leider noch nich nach der kurzen zeit. 
danke im vorraus


----------



## jgh (13. Mrz 2012)

Hier mal deine kompilerbare Version dazu...Bemerkungen sind soweit im Code als Kommentare zugefügt.
Evtl. kann ich dir gleich mal einen Vorschlag machen, wie man  sowas "geschickter" lösen kann
Auf Semantik wurde nicht groß geachtet...



```
import java.util.Scanner;

public class Aufgabe12 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("Bitte geben Sie die Abgasnorm ein:");
		int a = sc.nextInt();
		System.out.println("Bitte geben Sie den Hubraum ein:");
		int b = sc.nextInt();
		System.out.println("Bitte geben Sie den Fahrzeugtyp ein:");

		// char c = sc.nextInt(); nextInt() liefert natürlich einen int zurück,
		String help = sc.next();
		char c = help.charAt(0);
		double q = (b / 100) * 15.13;
		double r = (b / 100) * 27.53;
		double s = (b / 100) * 7.36;
		double t = (b / 100) * 16.05;
		double u = (b / 100) * 6.75;
		double v = (b / 100) * 15.44;
		if (a == 1) {// Wahrheitsabfragen (ist a gleich 1?) werden in java mit
						// == geschrieben, ansonsten würdest du der Variablen a
						// den Wert 1 zuweisen.
			if (c == 'O') {// s.o und Vergleiche mit einem char besitzen diese
							// Syntax
				System.out.println("Die Steuerschuld betraegt " + q
						+ "Euro pro Jahr");
			}
			if (c == 'D') {
				System.out.println("Die Steuerschuld betraegt " + r
						+ "Euro pro Jahr");
			}

			else {
				System.out.println("Eingabe nicht korrekt.");
			}

		}
		if (a == 2) {
			if (c == 'O') {
				System.out.println("Die Steuerschuld betraegt " + s
						+ "Euro pro Jahr");
			}
			if (c == 'D') {
				System.out.println("Die Steuerschuld betraegt " + t
						+ "Euro pro Jahr");
			}

			else {
				System.out.println("Eingabe nicht korrekt.");
			}

		}
		if (a == 3) {
			if (c == 'O') {
				System.out.println("Die Steuerschuld betraegt " + u
						+ "Euro pro Jahr");
			}
			if (c == 'D') {
				System.out.println("Die Steuerschuld betraegt " + v
						+ "Euro pro Jahr");
			}

			else {
				System.out.println("Eingabe nicht korrekt.");
			}

		}

		if (a < 3) {
			System.out.println("Eingabe nicht korrekt.");
		}
		if (a > 1) {
			System.out.println("Eingabe nicht korrekt.");
		}
	}
}
```


----------



## imal (13. Mrz 2012)

cool, danke  dann les ich mir mal durch, was du jetzt geändert hast und änder meinen code dementsprechen


----------



## imal (13. Mrz 2012)

habs jetzt mal alles geändert, funktioniert einwandfrei 
außer dass er mir hinter das ergebnis immer einmal "Eingabe nicht Korrekt." angibt.
am anfang warns 3, 2 bin ich aber schon losgeworden. die warn auch nur ein tippfehler...
einen werd ich leider nicht los, weil ich nicht weiß wie ich das in code schreiben soll


```
else {
			System.out.println("Eingabe nicht korrekt.");
                        }
```
irgendwie schnappt er sich das ding und hauts raus, obwohl die if-schleife vorher zutrifft und er das else eigendlich garnicht mehr berücksichtigen müsste. naja ich hab mir jetzt überlegt aus dem else noch ne if-schleife zu machen die dann ungefähr so aussehen soll:


```
if (c != 'O' or 'D') {
			System.out.println("Eingabe nicht korrekt.");
                        }
```
mein problem ist, dass er nichts als "or" annimmt... hab jetzt ^, |, || ausprobiert, oder wie oben steht einfach "or"
will er aber nicht haben, der sack. 
ich schätze, da ich da nen char mit nem quasi zu ner zahl umgewandelten char vergleiche will er davon einfach nix haben.... aber wie ichs wegbekomm weiß ich leider nich.


----------



## jgh (13. Mrz 2012)

so 

```
if (c != 'O' ||c!= 'D') {
            System.out.println("Eingabe nicht korrekt.");
```
                        }


----------



## imal (13. Mrz 2012)

compilieren lässt sichs jetzt, "Eingabe nicht korrekt." kommt allerdings immernoch. ich hab die zeilen jetzt einfach aus dem code verbannt, jetzt passts.
Danke für deine hilfe


----------



## jgh (13. Mrz 2012)

das war aber natürlich nur die syntaktische Hilfe, du mussst in deiner If-bedingung mit "und" fragen...dann passt das auch.

```
if (c!='O'&& c!='D'){...
```


----------



## imal (13. Mrz 2012)

ahh okay  werd ich nachher mal ausprobieren, aber nach ner nacht durchprobieren und basteln is langsam aber sicher die luft raus. dementsprechend gehts jetzt wieder zu windows und erstmal weg von java. 
danke für die hilfe nochmal


----------

