# Umrechner



## Carlos Valderra (15. Jun 2012)

Servus,

es geht um folgende Aufgabe:



> Im Download-Bereich des  finden Sie die Datei preise.txt, welche zeilenweise den Produktnamen
> und dessen Preis beinhalten.
> 
> a) Schreiben Sie ein Programm namens Umrechner.java, das diese Datei übergeben bekommt
> ...



Ich hab Probleme bei der Aufgabe b), die a) hab ich soweit geschafft. Trotzdem hab ich die a) mitgepost, weil ich glaube, sie ist zum Verständnis der Aufgabe notwendig.

Hier mein Quellcode:


```
import IOulm.*;

public class Umrechner{
public static void main (String[] args) {
double Preis = 0.00;
double Dollarpreis = 0.00;
String Produktname = "";
String P = "";
int Zeile = 0;

while ( Zeile < 23) {
  if  (Urc.readWord()) {
         Produktname = Urc.getWord();
		 }
		 else {
         System.out.println("Konnte nicht einlesen.");
	 System.exit(1);
      }

	  if (Produktname == "Ingwer") {
	  "Ingwer" = P;
	  }


if (Urc.readDouble()) { 
         Preis = Urc.getDouble();
      } 
	   
	  else {
         System.out.println("Konnte nicht einlesen.");
	 System.exit(2);
      }
	  
	
	  Dollarpreis = (java.lang.Math.round((Preis * 1.24) *100) /100.);
	  System.out.println (Produktname+ " " + Dollarpreis);
	  Zeile = Zeile + 1;
	  
	  }
	  
	  
	  }
	  }
```

Es erscheinen folgende Fehlermeldungen:


> Umrechner.java:21: unexpected type
> required: variable
> found   : value
> "Ingwer" = P;
> ...



Die Datei preise.txt sieht übrigens *umgerechnet* so aus:


> Wassermelone 4.71
> Birne 0.93
> Champignon 3.15
> Granatapfel 2.07
> ...


----------



## LukHaimb27 (15. Jun 2012)

1. Strings kann man nicht mit == vergleichen
dafür sollte man equals nehmen

2.
"Ingwer" = P; was soll diese Zeile machen?


----------



## Gast2 (15. Jun 2012)

1) Strings per equals vergleichen
2) 
	
	
	
	





```
"Ingwer" = P;
```
 => 
	
	
	
	





```
P = "Ingwer";
```
, Du kannst einem String nichts zuweisen, nur Variablen.
3) Variablen sollte man klein schreiben.


----------



## Carlos Valderra (15. Jun 2012)

LukHaimb27 hat gesagt.:


> 2.
> "Ingwer" = P; was soll diese Zeile machen?



folgendes:


> dass die entsprechende Zeile beim
> Einlesen des Produktnamens Ingwer nicht weiter bearbeitet und somit auch nicht in die
> umgerechnete Datei gespeichert wird.


----------



## LukHaimb27 (15. Jun 2012)

Also, wenn "Ingwer" in der Variable P steht, wird es nicht mehr bearbeitet?

zuweisen geht andersrum (
	
	
	
	





```
P = "Ingwer";
```
)


----------



## X5-599 (15. Jun 2012)

Da würde ich ja sowas nehmen


```
if(produktname.equals("Ingwer"))
  continue;
```


----------



## Carlos Valderra (15. Jun 2012)

X5-599 hat gesagt.:


> Da würde ich ja sowas nehmen
> 
> 
> ```
> ...



Danke hat soweit geklappt. Hab jetzt noch ein:


```
if(Produktname.equals("Radieschen"))
		continue;
```

eingefügt, damit die Zeile mit 1.18$ nicht beachtet wird. Ich glaube, dass ist allerdings nicht ganz Sinn der Sache. Wenn ich es allerdings mit 


```
if(Dollarpreis == 1.18)
		continue;
```

klappts nicht.


----------



## LukHaimb27 (15. Jun 2012)

Schonmal probiert zu debuggen?
Was steht denn in Dollarpreis drinnen?
Könnte ein Rundungsfehler etc. sein


----------



## X5-599 (15. Jun 2012)

Ich meine mich zu erinnern, dass Vergleiche mit Double etc immer problematisch sind. Was meinst du mit "Sinn der Sache"? Den Preis zu identifizieren der nach der Umrechnung 1.18$ ergibt? Wenn ja, dann hast du recht. Das müsste anders gemacht werden. Denn die ausgelesenen Preise sind doch die Euro Preise die dann umgerechnet werden müssen, oder?

Nochwas: Was ist denn das für ein komisches Runden im Beispiel? 
aus $14.2235623 sollen $14.23 werden

Nach meiner Rechnung ist der einzige Artikel der nach dem Umrechnen in die Nähe von 1.18$ kommt: Die Birne mit 1.15$ (0.93€)...


----------



## LukHaimb27 (15. Jun 2012)

Die Liste die er gepostet hat, ist bereits umgerechnet, wenn ich das richtig verstanden habe


----------



## Carlos Valderra (15. Jun 2012)

LukHaimb27 hat gesagt.:


> Die Liste die er gepostet hat, ist bereits umgerechnet, wenn ich das richtig verstanden habe



So ist es.


----------



## flopalko (17. Jun 2012)

Du kannst doubles nicht einfach so vergleichen. Ich würde es so machen:

```
if(abs(1.18-Dollarpreis) < 0.01)
     continue
```


----------



## x22 (18. Jun 2012)

Oder auch mit der switch-case Anweisung zu lösen um diese ewigen if Abfragen zu umgehen..


----------



## Carlos Valderra (25. Jun 2012)

Danke für die Hilfe, hier übrigens die Lösung:


```
import IOulm.*;

public class Umrechner{
   public static void main(String[] args) {
      final double KURS = 1.24;
      final double SCHRANKE = 1E-12;

      while (Urc.readWord()) {
	 String name = Urc.getWord();
         double preis, price;

	 //Preis einlesen
	 if (!Urc.readDouble()) {
	    System.err.println("Preis fehlt");
	    System.exit(1);
	 }
	 preis = Urc.getDouble();
         price = preis * KURS;
	 price = (Math.ceil(price * 100)) / 100;

         /*Ausgeben, wenn Produkt nicht Ingwer und
	   Vergleich auf Gleichheit fehlschlägt*/
         if (!name.equals("Ingwer") &&
	    !(Math.abs(price - 1.18) < SCHRANKE)) {
	    System.out.println(name + " $" + price);
	 }
      }
   }
}
```


----------

