# Einzelpreis mit einer Methode Berechnen



## chillerStudent (22. Nov 2011)

Guten Tag,

die Aufgabenstellung lautet wie folgt:

Der Preis pro Quadratmeter Teppichboden beträgt 15 Euro falls eine der Seiten
kürzer als 2 Meter ist und 10 Euro sonst. Schreiben Sie ein Programm, das vom Nutzer
wiederholt die Seitenlänge gewünschter rechteckiger Teppichstücke abfragt und als Ergebnis
den Gesamtpreis ausgibt. Die Längenangaben sollen ganzzahlig sein. Die Abfrage soll abbrechen,
sobald der Nutzer bei Länge oder Breite eine 0 eintippt. Verwenden Sie eine Methode,
um den Preis eines einzelnen Teppichstücks zu berechnen. Der Methode sollen als Parameter
Länge und Breite des Teppichstücks übergeben werden.


Was ich bis jetzt habe:


```
static void CarpetPrice(int lenght, int width) {
		int qmeter=lenght*width;
		int price1 = 0, price2 = 0, price3;
		
		while((lenght!=0) && (width!=0)){
			if((lenght==1) || (width==1)){
				price1=qmeter*15;
			} else {
					price2=qmeter*10;
			}
			if(lenght==0){
				price3=price1+price2;
				System.out.println("price: "+price3);
			}
		}
                }
```

Was mir jetzt nicht so gefällt ist die Bedingung der whileschleife. Mein Problem erst einmal ist, ich weiß nicht wie ich die Einzelpreise berechne. bitte um Hilfe.


----------



## Asgar13 (22. Nov 2011)

1. 





> sobald der Nutzer bei Länge *oder* Breite eine 0 eintippt


2. in deine if bedingung geht er nur, wenn length gleich 0 ist und width >0.
3. Kannst du dir price2 und price 3 sparen
4. private vor deine Funktion schreiben


```
Gesamtpreis = länge* breite * preis pro quadratmeter
```

Oder in Einheiten: m * m * €/m² = m² * €/m² = (weggekürzt) €


```
private int gesamtPreis(int lenght, int width){
int preisProQuadratMeter;
if (length == 1 || width == 1){
    preisProQuadratMeter = 15;
}else{
    preisProQuadratMeter = 10;
}
return length * width * preisProQuadratMeter;
}
```

Wofür eine Schleife in der Funktion? ???:L


----------



## chillerStudent (22. Nov 2011)

> Wofür eine Schleife in der Funktion?



Also muss ich eine Schleife in der main schreiben?


----------



## chillerStudent (22. Nov 2011)

zum testen sieht meine main so aus:


```
public static void main(String[] args) {
		System.out.println("Nächster Teppich");
		System.out.print("Länge: ");
		int lenght=In.readInt();
		System.out.print("Breite: ");
		int width=In.readInt();
		
		CarpetPrice(lenght,width);
	}
```

Aber es gibt leider keine Ausgabe. Warum?


----------



## VfL_Freak (22. Nov 2011)

Moin,



chillerStudent hat gesagt.:


> Also muss ich eine Schleife in der main schreiben?


nein eher nicht ... :noe:
*EDIT:* es sei denn, Du willst dort mehrere Berechnung imt immer wieder neu eingegebenen werten zulassen !

Die Frage war wohl eher, warum in Deiner Methode der Preis solange berechnet werden soll, wie die übergebenen Werte != 0 sind ......

Gruß
Klaus


----------



## chillerStudent (22. Nov 2011)

VfL_Freak hat gesagt.:


> Moin,
> 
> 
> nein eher nicht ... :noe:
> ...



ich muss ja irgendwie die abfrage wiederholen, bis halt 0 eigegeben wird. dann so er die einzelnen preise addieren und ausgeben. und dazu fällt mir keine bedingung ein.


----------



## chillerStudent (22. Nov 2011)

> EDIT: es sei denn, Du willst dort mehrere Berechnung imt immer wieder neu eingegebenen werten zulassen !



So hab ich die Aufgabe zumindest verstanden. Siehe ersten Beitrag.


----------



## Asgar13 (22. Nov 2011)

*Beim zweiten durchlesen auch gesehen*

Ja, die Schleife würde ich in der Main machen.(Trennung zwischen Ausgabe -> Sytsem.out und Berechnung)

bzw. Für mehrere Eingaben musst du ja die Schleife um deine Eingaben machen.

----------------------


```
int gesamtBetrag = 0;//Über die Schleife

//Unter deinem einlesen
gesamtBetrag = gesamtBetrag + gesamtPreis(lenght, width);//Ja, zum Verständnis ungekürtzt
System.out.println(" Ihr Gesamtbetrag: " +gesamtbetrag+ " €");
```

Wenn du jetzt deine Schleife machst, dann gibt er dir immer den gesamtbetrag aus.


----------



## VfL_Freak (22. Nov 2011)

Moin,



chillerStudent hat gesagt.:


> ich muss ja irgendwie die abfrage wiederholen, bis halt 0 eigegeben wird. dann so er die einzelnen preise addieren und ausgeben



So, wie Du es hattest ist es aber eine Endlosschleife, da weder Länge (BTW: es heisst übrigens  *length* !!) noch Breite innerhalb der Schleife verändert wird!

Zudem :
GELÖSCHT - war Blödsinn ... die Eingabe soll ja ganzzahlig sein 
Nichts desto trotz, würde ich von vorne herein Länge und Breite auf '<2' prüfen !


Gruß
Klaus


----------



## chillerStudent (22. Nov 2011)

wow danke.

nun sieht meine main so aus:

```
public static void main(String[] args) {
		
		int lenght, width,j=0,x;
		do{
			System.out.println("Nächster Teppich");
			System.out.print("Länge: ");
			lenght=In.readInt();
			System.out.print("Breite: ");
			width=In.readInt();
			x = CarpetPrice(lenght,width);
			j=j+x;
			if((lenght==0) || (width==0)){
				System.out.println(j);
			}
		}while((lenght!=0) || (width!=0));
	}
```

hier stört mich wieder die whilebedingung. ich weiß nicht was ich da reinschreiben soll. kann mir jemand einen ansatz geben?

*EDIT:* sry, es funktioniert doch, hatte vergessen zu speichern.


----------



## chillerStudent (22. Nov 2011)

Ein kleines Problem hab ich leider noch. Ich muss es schaffen, dass wenn ich 0 bei länge eingebe, er mich nicht mehr nach der breite fragt.

was ist an der if bedingung falsch?


----------



## VfL_Freak (22. Nov 2011)

Moin,



chillerStudent hat gesagt.:


> was ist an der if bedingung falsch?


äh, nix 
Nur wird dadurch die Schleife nicht abgebrochen !
Die While-Schleife soll ja solange laufen, wie BEIDE Werte ungleich 0 sind. Sobald nur einer gleich 0 ist, wird abgebrochen !


```
public static void main( String[] args ) 
{
    int length, width, j, x = 0;
    do
    {
        System.out.println("Nächster Teppich");
        System.out.print("Länge: ");
        length = In.readInt();
        if( length != 0 )
        {
            System.out.print("Breite: ");
            width = In.readInt();
            x = CarpetPrice( length,width );  // dies auch ausführen, wenn "width==0" ???
            j += x;
            if( width==0 )
            {
                System.out.println(j);
            }
        } // if
    } while( (length!=0) && (width!=0) ); // <-- !!! '&&' statt '||' !!!
}
```
So vielleicht - ist aber VHIDT 

Wozu brauchst Du denn dieses 'j' ???:L

Gruß
Klaus


----------



## chillerStudent (22. Nov 2011)

funktioniert auch nicht mit &&
Wenn ich 0 für länge eingebe soll er mich nicht die breite abfragen

kompletter code:

```
public static void main(String[] args) {
		int length;
		int width;
		int totalPrice=0;
		do {
			System.out.println("Nächster Teppich");
			System.out.print("Länge: ");
			length=In.readInt();
			System.out.print("Breite: ");
			width=In.readInt();
			System.out.println();
			
			totalPrice=totalPrice+carpetPrice(length,width);
			
			if((length==0) || (width==0)){
				System.out.println("Preis: "+totalPrice);
				break;
			}
		} while((length!=0) && (width!=0));
	}
	static int carpetPrice(int length, int width) {
		int priceQMeter;
		if ((length == 1) || (width == 1)){
		    priceQMeter = 15;
		} else {
			priceQMeter = 10;
		}
		return length * width * priceQMeter;
	}
}
```


----------



## fibeline (22. Nov 2011)

Huhu,
dann packe eine if-Abfrage direkt hinter die Längen-Eingabe und die für die Breite entsprechend. Die Schleife dann endlos machen mit z.B. while(true).


```
...
           System.out.print("Länge: ");
           length=In.readInt(); 
           if(length==0){
                System.out.println("Preis: "+totalPrice);
                break;
            }

           System.out.print("Breite: ");
           width=In.readInt();
           if((width==0){
                System.out.println("Preis: "+totalPrice);
                break;
            }
            ...
```


----------

