Überschreiben?

Status
Nicht offen für weitere Antworten.

mobile

Bekanntes Mitglied
Hi,
ich habe mal eine Frage. Ich habe 4 Methoden, die sich alle bis auf eine Kleinigkeit ähneln. Also beid er hier:
Code:
final boolean add() {
		BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
		String eingabeZeile;
		int zahl;
		try {		
			Random generator = new Random();
			int zahl1 = generator.nextInt(30);
			int zahl2 = generator.nextInt(30);
			int ergebnis = zahl1+zahl2;
			System.out.println("Aufgabe: " + zahl1 + "+" + zahl2 + "=");
			eingabeZeile = eingabe.readLine(); 
			StringTokenizer tokens = new StringTokenizer(eingabeZeile);
			zahl = Integer.parseInt(tokens.nextToken());  
			if(zahl == ergebnis) {
				System.out.println("Richtig!"+"\n");
				return true;
			}
			else {
				System.out.println("Das war leider falsch!"+"\n");
				return false;
			}
		}
		catch(IOException e) {
			System.out.println("Fehler bei der Eingabe");
			return false;
		}
		catch(NoSuchElementException e) {
			System.out.println("Zuwenig Werte eingegeben");
			return false;
		}
		catch(NumberFormatException e) {
			System.out.println("Bitte Ganzezahlen verwenden!");
			return false;
		}
	}
wird ja was addiert jetzt gibt es noch 3 andere die subtrahieren multiplizieren und dividieren. Gibt es nicht irgendwie eine Möglichkeit, zur Überschreibung oder so was? Weil die Erzeugung von Zufallszahalen kommt immer wieder vor. Lediglich Zeile 10 und 11 verändern sich.
Kann ich nicht in einer Methode Zufallszahlen erstellen lassen und das restliche krams, übergebe das und dann änder ich in einer anderen Methoden nur noch die Zeilen die ich anders brauche?

Danke für Tipss
 
B

Beni

Gast
Ich würde das mit dem Delegate-Pattern lösen:

Code:
// das ist neu
interface Operation{
  public int work( int a, int b );
  public String getSign();
}

class Addition implements Operation{
  public int work( int a, int b ){
    return a+b; 
  }

  public String getSign(){
    return "+";
  }
}



// dieser Teil ist aus deinem Code (leicht verändert)

public boolean add(){
  return calculate( new Addition() );
}

private boolean calculate( Operation operation ) {
      BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
      String eingabeZeile;
      int zahl;
      try {      
         Random generator = new Random();
         int zahl1 = generator.nextInt(30);
         int zahl2 = generator.nextInt(30);
         int ergebnis = operation.work( zahl1, zahl2 );   // <<-------------------
         System.out.println("Aufgabe: " + zahl1 + operation.getSign() + zahl2 + "="); // << -------
         eingabeZeile = eingabe.readLine();
         StringTokenizer tokens = new StringTokenizer(eingabeZeile);
         zahl = Integer.parseInt(tokens.nextToken()); 
         if(zahl == ergebnis) {
            System.out.println("Richtig!"+"\n");
            return true;
         }
         else {
            System.out.println("Das war leider falsch!"+"\n");
            return false;
         }
      }
      catch(IOException e) {
         System.out.println("Fehler bei der Eingabe");
         return false;
      }
      catch(NoSuchElementException e) {
         System.out.println("Zuwenig Werte eingegeben");
         return false;
      }
      catch(NumberFormatException e) {
         System.out.println("Bitte Ganzezahlen verwenden!");
         return false;
      }
   }

Subtraktion, Multiplikation, ... bestehen ebenfalls noch aus einer kleinen Klasse + einer kleinen Methode (noch weniger Code benötigt man, wenn man anonyme Klassen verwendet).
 

jPat

Bekanntes Mitglied
hi,


du kannst dir ein Interface und dann vier klassen schreiben, die es Implementieren.


Code:
interface Mathe {

public int func(int a, int b);

}

class Adder implements Mathe{


public int func(int a,int b){
   int ergebnis = a+b;
   System.out.println("Aufgabe: " + a+ "+" + b + "="); 
return ergebnis;

}


}
class Mult implements Mathe{


public int func(int a,int b){
   int ergebnis = a*b;
   System.out.println("Aufgabe: " + a+ "*" + b + "="); 
return ergebnis;

}


}

und so weiter dann ....


Code:
final boolean rechne(Mathe m) {
...
ergebnis = m.func(a,b) // einfach aufrufen
...
} 

// in der main oder so....

...

rechne(new Adder());
...

so wird es gehen.



Gruß
Patrick
 
G

Guest

Gast
gibd der Methode add doch n Parameter mit auf den Weg, mit dem du angibst welche Operation ausgeführt werden soll.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben