# Methoden Hausaufgabe



## inq51 (10. Nov 2011)

Hi,

ich weiß, es ist eine lange Aufgabe aber ich bin am verzweifeln. Arbeite schon seit 2 Tagen an dieser Aufgabe aber ich weiß nicht mehr weiter, deshalb poste ich sie jetzt hier.
Ich habe in Kommentaren geschrieben, wo ich nicht mehr weiterkomme, aber ich schreibe hier auch nochmal die ganze Aufgabenstellung hin, damit man es besser nachvollziehen kann.

1.Legen Sie eine Klasse _Tarife_ mit einer main-Methode an.

2.
a) Implementieren Sie nun ein Unterprogramm _prepaid_ welches die Parameter _int minuten_ und _int sms_ übergeben bekommt, und einen _int-Wert_ zurückliefert.

Berechnen Sie im Unterprogramm die Kosten, die durch die vertelefonierten Minuten und die Anzahl versendeter SMS entstehen und geben Sie das Ergebnis zurück.

b) Schreiben sie analog dazu eine Methode _vertrag_ mit gleichen Übergabeparametern und gleichem Rückgabetyp wie die Methode _prepaid_.
- Erstellen sie zunächst drei Konstanten GRUNDPREIS, FREIMINUTEN und FREISMS geeigneten Typs.

- Überprüfen sie mit zwei if-Abfragen, ob länger telefoniert oder/und mehr SMS verschickt wurden als Freiminuten bzw. Frei-SMS verfügbar sind, und lassen Sie das Programm, wenn nötig, die Aufpreise berechnen. Speichern Sie die beiden Ergebnisse in zwei _int-Variablen_ _gespraechskosten_ und _smskosten_.

-Geben Sie die Gesamtkosten (Grundpreis + Gespraechskosten + SMS-Kosten) in Cent zurück.

3a)Legen Sie nun ein neues Unterprogramm _int vertragBilligerAb(int anzahlSms)_ an. Es soll für einen Verbraucher, der monatlich eine feste Anzahl _anzahlSms_ SMS-Nachrichten schreibt, ermitteln, ab welcher Gesprächsdauer sich der Vertragstarif mit Grundgebühr für ihn lohnt.

Überprüfen sie für Gesprächszeiten von 0 bis maximal 45000 Minuten, welcher der Tarife billiger ist. Sobald Sie die Dauer gefunden haben, ab der der Prepaid-Tarif höhere Kosten verursacht, geben Sie diese Dauer als Ergebnis zurück.

b) Die Methode _void vergleiche()_ soll nun auch unterschiedliche Mengen versendeter SMS-Nachrichten berücksichtigen und eine entsprechende Übersicht anzeigen.

Die SMS-Nachrichten sollen in Fünferschritten, also für 0..5..10..60 SMS, ausgeben, ab welcher Gesprächsdauer der Vertragstarif günstiger ist. Verwenden Sie folgendes Format für die Ausgabe auf stdout:
Bei 0 SMS ist der Vertrag ab 117 Minuten Gespraechszeit guenstiger.
Bei 5 SMS ist der Vertrag ab 111 Minuten Gespraechszeit guenstiger.
...
Benutzen Sie die vorher implementierte Methode _vertragBilligerAb_

c) Rufen sie _vergleiche() in der main-Methode auf_


Soweit bin ich bisher gekommen:

```
public class Tarife {

	public static int prepaid(int anzahlminuten, int anzahlsms){		
		int kostensms = 19;	 // 19 Cent/SMS
		int kostenminuten = 15; // 15 Cent/Minute
		int gesamtkosten = anzahlminuten * kostenminuten + anzahlsms * kostensms;
		return gesamtkosten;
												   }
	public static int vertrag(int minuten, int sms){		
		int anzahlminuten = 100;
		int anzahlsms = 100;
		int kostensms = 19;	 // 19 Cent/SMS
		int kostenminuten = 29; // 29 Cent/Minute
		final int  GRUNDPREIS = 1745;	// 17,45€
		final int  FREIMINUTEN = 120;	// 120 Minuten
		final int  FREISMS = 40;		// 40 SmS
		
		int smskosten = 0;
		if (anzahlsms > FREISMS){
			int differenz = anzahlsms - FREISMS;
			smskosten = differenz * kostensms;
			}
		
		int gespraechskosten = 0;
		if (anzahlminuten > FREIMINUTEN){
			int differenz = anzahlminuten - FREIMINUTEN;
			gespraechskosten = differenz * kostenminuten;}
		
		int gesamtkosten = GRUNDPREIS + smskosten + gespraechskosten;
			
		return gesamtkosten;
			}
		
	public static int vertragBilligerAb(int anzahlSms){
		int ergebnis = 0;
		for( int anzahlminuten = 0; anzahlminuten < 45000; anzahlminuten++){
			if(vertrag(0,100) < prepaid(0,100)){       //wie schaffe ich es, dass er mir 
				ergebnis = anzahlminuten;}	      //das richtige ergebnis anzeigt, bei
									     //welcher anzahl an minuten der vertrag
		}							    //billiger als der prepaid tarif ist?	
		                                                             //Anzahl an SMS soll konstant sein.
         return ergebnis;					
		}
	public static void vergleiche(){
								        //bei dieser Methode hab ich überhaupt keine 
									//Idee. Was sind die Parameter? Und muss ich
									//hier auch wieder eine for-Schleifen nehmen?
									// siehe 3.b)
}
	public static void main(String[] args) {
	vergleiche();
		
       //hier soll ich vergleiche() aufrufen, welche Parameter? Und muss noch etwas anderes hin?
		
	}

}
```


----------



## Camill (11. Nov 2011)

Wurden die Werte der Variablen festgelegt oder handelt es sich hierbei um fiktive Werte?


----------



## timbeau (11. Nov 2011)

Ok...so wie ich das verstanden habe...

Falls Erklärungen nötig sind, gerne. Ansonsten würde ich auch ein Danke annehmen 
War aber auch nicht mehr viel zu tun. Die Parameter die du Methoden übergibst sollten dort dann auch genutzt werden. (Methode vertrag)


```
package javaforum;

public class Tarife {

	final static int GRUNDPREIS = 1745; // 17,45€
	final static int FREIMINUTEN = 120; // 120 Minuten
	final static int FREISMS = 40; // 40 SmS

	public static int prepaid(int anzahlminuten, int anzahlsms) {
		int kostensms = 19; // 19 Cent/SMS
		int kostenminuten = 15; // 15 Cent/Minute
		int gesamtkosten = anzahlminuten * kostenminuten + anzahlsms
				* kostensms;
		return gesamtkosten;
	}

	public static int vertrag(int minuten, int sms) {
		int anzahlminuten = minuten;
		int anzahlsms = sms;
		int kostensms = 19; // 19 Cent/SMS
		int kostenminuten = 29; // 29 Cent/Minute

		int smskosten = 0;
		if (anzahlsms > FREISMS) {
			int differenz = anzahlsms - FREISMS;
			smskosten = differenz * kostensms;
		}

		int gespraechskosten = 0;
		if (anzahlminuten > FREIMINUTEN) {
			int differenz = anzahlminuten - FREIMINUTEN;
			gespraechskosten = differenz * kostenminuten;
		}

//		System.out.println("SMS " + smskosten);
//		System.out.println("Gespraechskosten " + gespraechskosten);
		int gesamtkosten = GRUNDPREIS + smskosten + gespraechskosten;
//		System.out.println("Gesamt: " + gesamtkosten);

		return gesamtkosten;
	}

	public static int vertragBilligerAb(int anzahlSms) {
		int ergebnis = 0;
		for (int anzahlminuten = 0; anzahlminuten < 45000; anzahlminuten++) {
			if (vertrag(anzahlminuten, anzahlSms) < prepaid(anzahlminuten, anzahlSms)) { // wie schaffe ich es, dass
														// er mir
				ergebnis = anzahlminuten;
				return ergebnis;
			} // das richtige ergebnis anzeigt, bei
				// welcher anzahl an minuten der vertrag
		} // billiger als der prepaid tarif ist?
			// Anzahl an SMS soll konstant sein.
		return -1;
	}

	public static void vergleiche() {
		for (int sms = 0; sms < 100; sms += 5) {
			if(vertragBilligerAb(sms) != -1){
			System.out.println("\nVertrag billiger bei " + sms
					+ " geschriebenen SMS wenn");
			System.out.println("mehr als " + vertragBilligerAb(sms)
					+ " Minuten telefoniert werden.");
			System.out.println("Vergleich: Vertrag(" + vertrag(vertragBilligerAb(sms), sms)/100.0+") und Prepaid(" + prepaid(vertragBilligerAb(sms), sms)/100.0+") €");
			}
			else {
				System.out.println("Vertrag nicht billiger");
			}
		}
	}

	public static void main(String[] args) {
		vergleiche();

		int min = 66;
		int sms = 55;
		System.out.println(min + " Minuten & " + sms + " SMS");
		System.out.println("Prepaid:" + prepaid(min, sms));
		System.out.println("Vertrag:" + vertrag(min, sms));
		

		vergleiche();

	}

}
```


----------



## inq51 (11. Nov 2011)

Ein riesengroßes Danke!
Durch deine Lösung hab ich es jetzt verstanden 
@Camill: Sie waren in einer Tabelle festgelegt.


----------

