Übungsaufgabe lösen - Problem mit true und false

Status
Nicht offen für weitere Antworten.

Aurora

Mitglied
Hallo liebe Leute im Java-Forum!

In meinem Kurs habe ich eine Aufgabe gestellt bekommen auf die ich einfach keine Lösung finde. Hat da jemand eine Idee wie das funktioniert?
Hier erst mal die Aufgabenstellung:

Schreibe ein Programm "Buergermeister". Das Programm enthält eine Methode, der das diesjährige Budget der Stadt übergeben wird. Es wird übergeben: Budget für Feuerwehr, Budget für Polizei und Budget für Bildung. In der Methode werden 12 Zyklen durchlaufen (12 Monate eines Jahres). In jedem Zyklus wird vom jeweiligen übergebenen Budget ein bestimmter Betrag abgezogen. In der Methode werden drei boolean-Werte ermittelt, die besagen, ob das jeweilige Budget ausgereicht hat oder nicht. Diese drei Werte werden verrechnet. Ist einer davon false, gibt die Methode "true" an die main-Methode zurück, da EIN überzogenes Budget die Stadt noch nicht ruiniert (Es soll dann "alles ok" in der main-Methode ausgegeben werden). Sind aber zwei oder drei der Budgets false, gibt die Methode false zurück und es wird in der main-Methode ausgegeben: "Stadt ruiniert".

Sollte ich am besten mit einer for-Schleife arbeiten?

Wenn ich dann die Werte am Schluss herausbekommen sollte ist noch das Problem mit dem 2 x true ist immer noch "ok" oder true - das bereitet mir die größsten Kopfschmerzen bei dem ganzen Ding.
Geht das mit "if"? Aber wie nur :?:


Über einen Anhaltspunkt oder einen Vorschlag würde ich mich riesig freuen...

Grüße von Aurora 🙂
 
Hallo Aurora,

das mit den 12 Zyklen kannst Du in einer for-Schleife machen. Und ausgehend davon, dass die drei Booleans in einem Array stehen, kannst Du z.B. eine weitere for-Schleife bauen und in eine Integer-Variable hinein zählen, wie viele false es gibt:

Code:
falseCounter = 0;

for (int i=0; i<booleanArray.length; i++) {
   if (!booleanArray[i]) {
      falseCounter++;
   }
}

if (falseCounter >= 2) {
   allesOK = false;
}
else {
   allesOK = true;
}

Gruß
haggey
 
Array hatten wir noch nicht - kommt das in die main rein oder direkt in die Methode?
Wenn ich dann die Lösung raus habe - muss das was du allesOK genannt hast noch initialisiert werden? Also ist das eine Variable?
Kannst du mal vielleicht kurz sagen was das Array, das du da geschrieben hast macht? Also der erste Teil kommt mir ganz fremd vor 😳

Ich steh noch etwas auf dem Schlauch...
 
Schreibe ein Programm "Buergermeister".
Klassenname: Buergermeister
Das Programm enthält eine Methode, der das diesjährige Budget der Stadt übergeben wird.
Es wird übergeben:
Budget für Feuerwehr,
Budget für Polizei
und Budget für Bildung.
Eine Methode setBudget(...) mit drei Werten als Parameter (Typ: float oder double)

In der Methode werden 12 Zyklen durchlaufen (12 Monate eines Jahres).
Eine einfache for-Schleife innerhalb der setBudget(...) Methode, die 12-Mal durchläuft.

Code:
In jedem Zyklus wird vom jeweiligen übergebenen Budget ein bestimmter Betrag
abgezogen.
Innerhalb der Schleife von jedem Parameter irgendeinen Wert abziehen (egal wie hoch).
Du kannst direkt die übergebenen Parameter (die Variablen) verwenden, ist in der Aufgabe
nicht ausdrücklich untersagt.

In der Methode werden drei boolean-Werte ermittelt, die besagen, ob das jeweilige
Budget ausgereicht hat oder nicht. Diese drei Werte werden verrechnet.
Das erfolgt nach der Schleife. Einfach prüfen, ob die Werte immer noch grösser 0 sind.
Drei If-Abfragen, jeweils für einen dieser Werte. Jedesmal einen Zähler hochzählen, wenn
Budget nicht überschritten ist.

Ist einer davon false, gibt die Methode "true" an die main-Methode zurück,
da EIN überzogenes Budget die Stadt noch nicht ruiniert (Es soll dann "alles ok"
in der main-Methode ausgegeben werden).
Soll heissen, dass der Zähler vom letzten Schritt grösser oder gleich zwei sein müsste.

Sind aber zwei oder drei der Budgets false, gibt die Methode false zurück und es
wird in der main-Methode ausgegeben: "Stadt ruiniert".
Das ist der Else-Fall.

In der Methode main(...) abhängig von true oder false aus der Methode setBudget(...)
"Alles OK" oder "Stadt ruiniert".

Manchmal glaube ich, dass die Budgetplanung in so manchen Städten tatsächlich so realitätsfremd ist. 😉
 
So, ich habe das nach meinem Verständnis der Materie jetzt mal nach deiner Anleitung versucht...
Aber da habe ich wohl einen (oder viele - wer weiß) Fehler gemacht.
Ich habe folgendes gebastelt:

Code:
class Buergermeister {
	
	static boolean jahresAbrechnung(int f, int p, int s) {
		boolean saldo;
		int budget =0;
		int budgetF =0;
		int budgetP =0;
		int budgetS =0;
		
		for(int monat=1; monat<=12; monat=monat++) {
			for (int ausgaben=10; monat<=12; budgetF=f-ausgaben) {	
			}
			
			if (budgetF>=0) budget=budget++;
			else budget=budget-1;	
		}
		
		for(int monat=1; monat<=12; monat=monat++) {
			for (int ausgaben=20; monat<=12; budgetP=p-ausgaben) {	
			}
			if (budgetP>=0) budget=budget++;
			else budget=budget-1;
		}
		
		for(int monat=1; monat<=12; monat=monat++) {
			for (int ausgaben=10; monat<=12; budgetS=s-ausgaben) {
			}
			if (budgetS>=0) budget=budget++;
			else budget=budget-1;
		}
		
		if (budget<1) saldo =false;
		else saldo =true;
		
		return saldo;
	}
	
	
	public static void main(String[] args) {
		int budgetFeuer=5000;
		int budgetPolizei=7000;
		int budgetSchule=3000;
		
		if(jahresAbrechnung(budgetFeuer, budgetPolizei, budgetSchule)) {
			System.out.println("Die Stadt hat die Jahresabschlussrechnung erfolgreich bestanden");
		}
		
		else System.out.println("Die Stadt ist Bankrott");
	}
}

Bestimmt mache ich viel unnötiges Zeug aber trotzdem - es kommt NICHTS heraus - das Programm macht irgendwie gar nichts weiß jemand was ich falsch mache?
???:L
 
Aurora hat gesagt.:
Bestimmt mache ich viel unnötiges Zeug...
Du versuchst das zu viel in die Aufgabe hinein zu interpretieren. 😉

OK, im Prinzip hast du es schon. Hier eine Vereinfachung nach der Aufgabenstellung.
Code:
class Buergermeister { 
   
   static boolean jahresAbrechnung(int f, int p, int s)
   { 
      int budgetF = f; 
      int budgetP = p; 
      int budgetS = s; 
       
      for(int monat=1; monat<=12; monat++)
      {
         budgetF -= 200.5; // Es ist das gleiche wie budgetF = budgetF - 200.5;  
         budgetP -= 350.6; 
         budgetS -= 423.4; 
      }

      int anzahlOK = 0;
      
      // Budget-Feuerwehr nicht überschritten?
      if( budgetF >= 0)
      {
         anzahlOK++;
      }

      // Budget-Polizei nicht überschritten?
      if( budgetP >= 0)
      {
         anzahlOK++;
      }

      // Budget-Bildung nicht überschritten?
      if( budgetS >= 0)
      {
         anzahlOK++;
      }
      
      // Mindestens zwei nicht überschritten bzw. höchstens eins überschritten?
      if( anzahlOK >= 2 )
      {
         return true;
      }
      
      return false;
   } 
    
    
   public static void main(String[] args) { 
      int budgetFeuer=5000; 
      int budgetPolizei=7000; 
      int budgetSchule=3000; 
       
      if(jahresAbrechnung(budgetFeuer, budgetPolizei, budgetSchule)) { 
         System.out.println("Die Stadt hat die Jahresabschlussrechnung erfolgreich bestanden"); 
      } 
       
      else System.out.println("Die Stadt ist Bankrott"); 
   } 
}
 
DANKE!!!!!

Und ich verstehe es sogar :lol:

Das ist herrlich.

Jetzt kann die Woche nur noch besser werden, bei so einem Start!

Ihr seit klasse :toll:

Viele liebe Grüße,
Aurora
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben