Ausweg aus Methodenflut gesucht

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo. Alle profiprogrammierer aufgepasst: Angriff der Methoden.....

das hier ist mein programm. vom ablauf her müsste es so funktionieren, nur habe ich wohl ein paar zuviele methoden verwendet. ist alles wohl nicht ganz im sinne von OOP, aber ist auch mein erstes programm. Würde mich freuen, wenn mir jemand einen ausweg aus diesem schlamassel bieten könnte

achtung und anschnallen:

Code:
import java.io.*;

public class MBC2
{
private int t1, t2, t3, t4, p1, c, b, läufer,läufer1,läufer2,läufer3, p2, p3, p4, i, j, k, l, x, y, z, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10;


public static void main(String[] args) throws IOException {
   new MBC2().invoke();
}


private void invoke() throws IOException {
   int d;
   
   
   p1 = 5;
   p2 = 9;
   p3 = 17;
   p4 = 20;

   BufferedReader din = new BufferedReader(new InputStreamReader(System.in));
   System.out.println("Lagerbestand ansehen........1 ");
   System.out.println("Lagereinbuchung.............2 ");
   System.out.println("Preisauskunft...............3 ");
   d = Integer.parseInt(din.readLine());

   if (d == 1) lager();
   else if (d == 2) bestand();
   else if (d == 3) lesen();
   else invoke();
}

private void lager() throws IOException {

   System.out.println("L A G E R B E S T A N D :");
   System.out.println(" Teil 1: " + t1);
   System.out.println(" Teil 2: " + t2);
   System.out.println(" Teil 3: " + t3);
   System.out.println(" Teil 4: " + t4);
   invoke();
}

 private void bestand() throws IOException {
 
   BufferedReader din = new BufferedReader( new InputStreamReader(System.in));
   
    System.out.println("Welcher Lagerbestand soll geändert werden?");
    System.out.println(" Teil 1.............1 " );
    System.out.println(" Teil 2.............2 ");
    System.out.println(" Teil 3.............3 ");
    System.out.println(" Teil 4.............4 ");
    b = Integer.parseInt(din.readLine());
 
    System.out.println (" Welche Menge soll eingebucht werden?");
    c = Integer.parseInt(din.readLine());
    if ( b == 1) t1 = t1 +c;
    else if ( b == 2) t2 = t2 +c;
    else if ( b == 3) t3 = t3 +c;
    else if ( b == 4) t4 = t4 +c;
    invoke();
 }


   
private void lesen() throws IOException {

   BufferedReader din = new BufferedReader( new InputStreamReader(System.in));

   System.out.print("Bitte gewuenschte Noppenzahl eingeben: ");
   x = Integer.parseInt(din.readLine());

if ( x > 0) berechnung();
else System.out.println("Falsche Eingabe");lesen();

}   

private void berechnung() throws IOException {
  
  for ( i = 0; i<=3; ) {
    y = i + 2*j + 3*k + 4*l;
    z = x - y;
    if ( z == 0) zaehler();
    else if ( z == 1) i++;
    else if ( z == 2) j++; 
    else if ( z == 3) k++;
    else if ( z == 4) l++;
    else i++;
  }i=0; j=0; k=0; l=0; berechnung1();
}
private void berechnung1() throws IOException {
  for ( j=0; j<=3; ) {
     
    y = i + 2*j + 3*k + 4*l;
    z = x - y;
    if ( z == 0) zaehler1();
    else if ( z == 1) i++;
    else if ( z == 2) j++;
    else if ( z == 3) k++;
    else if ( z == 4) l++;
    else j++;;
  }
i=0; j=0; k=0; l=0; berechnung2();
}
private void berechnung2() throws IOException {
  for ( k = 0; k<=3; ) {
     
    y = i + 2*j + 3*k + 4*l;
    z = x - y;
    if ( z == 0) zaehler2();
    else if ( z == 1) i++;
    else if ( z == 2) j++;
    else if ( z == 3) k++;
    else if ( z == 4) l++;
    else k++;
  }i=0; j=0; k=0; l=0;berechnung3();
}

private void berechnung3() throws IOException {
  for ( l = 0; l<=3; ) {
     
    y = i + 2*j + 3*k + 4*l;
    z = x - y;
    if ( z == 0) zaehler3();
    else if ( z == 1) i++;
    else if ( z == 2) j++;
    else if ( z == 3) k++;
    else if ( z == 4) l++;
    else l++;
  }i=0; j=0; k=0; l=0;kostenauswahl();
}



private void zaehler() throws IOException {
  läufer ++;
  v1 = i*p1 + j*p2 + k*p3 + l*p4; 
  if ( läufer == 1) v2 = v1;
  
kostenspeicher();
}

private void kostenspeicher() throws IOException {
  if ( v1 < v2 ) v2 = v1;
    
berechnung();}
 private void zaehler1() throws IOException {
    läufer1 ++;
    v3 = i*p1 + j*p2 + k*p3 + l*p4; 
    if ( läufer1 == 1) v4 = v3;
    
  kostenspeicher1();}
  
  private void kostenspeicher1() throws IOException {
    if ( v3 < v4 ) v4 = v3;
      berechnung1();}
      
private void zaehler2() throws IOException {
        läufer2 ++;
        v5 = i*p1 + j*p2 + k*p3 + l*p4; 
        if ( läufer2 == 1) v6 = v5;
        
      kostenspeicher2();}
      
      private void kostenspeicher2() throws IOException {
        if ( v5 < v6 ) v6 = v5;
          berechnung2();}

private void zaehler3() throws IOException {
            läufer3 ++;
            v7 = i*p1 + j*p2 + 3*p3 + l*p4; 
            if ( läufer3 == 1) v8 = v7;
            
          kostenspeicher3();}
          
private void kostenspeicher3() throws IOException {
            if ( v7 < v8 ) v8 = v7;
              berechnung3();}




private void kostenauswahl() throws IOException {
              if (v2 > v4) v9 = v4;
              else v9 = v2;
              if (v6 > v8) v10 = v8;
              else v10 = v6;
              if (v9 > v10) System.out.println(" Kosten fuer " + x + " Noppen betraegt: " + v10 + " Euro");
              else System.out.println(" Kosten fuer " + x + " Noppen betraegt: " + v9 + " Euro");
            }
           
}

Ziel dieses ganzen wirrwars ist für ein gegebenes x alle möglichen kombinationen aus den zahlen 1 bis 4 aufzustellen, mit preisen zu versehen und davon den günstigsten auszugeben. die lagerankopplung fehlt noch.

Bin mal auf eure antworten gespannt....


gruß
kai
 

crazy_N

Mitglied
Pack den code doch mal in eine code tag, dann siehts übersichtlicher aus.

Was ist so schlimm an vielen Methoden? Du hast doch sicherlich alle geschrieben, die du auch benötigst.
 
G

Gast

Gast
bekomme aber bei ausführung stackoverflowerror. hatte das gestern schonmal gepostet und da wurde mir gesagt, dass es wohl am aufbau meines programms liegen würde..
 
S

stev.glasow

Gast
Viele Methoden sind nicht schlimm, nur der Code ist 0,0 OOP.
Das ist Strukturierte-Programmierung mit OOP Syntax.

Das soll jetzt keine Vorwurf sondern ein Festsellung sein.
 
G

Gast

Gast
danke für deine auseinandersetzung mit meinem probleme stevg, nur sagt mir deine antwort ungefähr gar nix. bin neu bei java....sorry
 

foobar

Top Contributor
Ziel dieses ganzen wirrwars ist für ein gegebenes x alle möglichen kombinationen aus den zahlen 1 bis 4 aufzustellen, mit preisen zu versehen und davon den günstigsten auszugeben.
Willst du alle möglichen Permutationen der Zahlen 1 - 4 berechnen?
Ein paar Tips nebenbei:
- Verwende niemals eine Membervariable i, als Zähler in einer for-Schleife.
- Verwende sprechendere Bezeichner für Variablen und Methoden, denn was berechnet berechnung3() ?
 
G

Gast

Gast
richtig, es sollen alle permutationen berechnet werden.

wenn ich dich richtig verstehe, habe ich i als membervariable gewählt, damit diese auch in meiner formel verwendet und entsprechend verwendet wird. wie könnte man das denn anders lösen??

berechnung3 soll im endeffekt, wie bei den anderen berechnungsmethoden, alle kombinationen mit der zahl 4 berechnen.

zur verdeutlichung der variablen:
i repräsentatiert den faktor zur zahl1,
j repräsentatiert den faktor zur zahl2 etc.

z berechnet differenz zwischen gefordertem x und berechnetem y
v1-v10 sind die berechneten preise für die jeweiligen kombinationen. dabei berechne ich in der methode zaehler im den preis(zb. v1) und vergleiche ihn mit dem bisherigen niedrigsten (v2)
der läufer dient dazu, beim ersten durchlauf automatisch den berechneten wert auf v2 zu legen, damit ein vergleich angestellt werden kann.

hoffe, dass dir das beim verständnis weiterhilft..
 
G

Gast

Gast
hhhhhhhhhiiiiiiiiiiiiiiillllllllllffffffffffffffeeeeeeeeeeeeee...
 

foobar

Top Contributor
Die Permutation kann man aber einfacher finden.
- Fakultät berechnen.
- Solange die Elemente shufflen und in ein Set hinzufüge, bis die Anzahl der Elemente im Set gleich der Fakultät ist.
 
B

Beni

Gast
2 wichtige Punkt:

1.
Man muss nicht zu einer Methode "zurückkehren", das geschieht automatisch:

Beispiel: lager wird von invoke aufgerfufen
Code:
private void lager() throws IOException {

   System.out.println("L A G E R B E S T A N D :");
   System.out.println(" Teil 1: " + t1);
   System.out.println(" Teil 2: " + t2);
   System.out.println(" Teil 3: " + t3);
   System.out.println(" Teil 4: " + t4);
   invoke();
}

Am Schluss möchtest du zurück zu "invoke". Das geschieht aber nicht dem Befehl "invoke();", damit startest du einen erneuten Aufruf der Methode invoke. Du benötigst "return" (oder du schreibst gar nichts, wenn die Methode an das } herankommt, ist ganz klar, dass die Methode fertig gearbeitet hat).

Was du bisher gemachst hast sind ständige neue Aufrufe der verschiedenen Methoden. Bei jedem dieser Aufrufe wird das Programm etwas mehr geschachtelt, bis ihm schliesslich der Speicherplatz ausgeht.

Falls du aus irgendeiner nicht-OOP-Sprache kommst: in Java werden keine "Label"s und "goto"s verwendet. Es ist mehr ein "in ein Raum hinein, und durch die gleiche Tür wieder hinaus"-gehen.

2.
Ich weiss nicht 100% was dein Code können soll, aber ich springe mal auf das Wörtchen "Permutation".

Es lohnt sich einen Array, und Rekursion zu benutzen, z.B. sowas:

Code:
public class Main {
    public static void main(String[] arguments) {
        permute( new int[4], 0 );
    }

    private static void permute( int[] values, int index ){
    	if( index == values.length ){
    		StringBuffer buffer = new StringBuffer();
    		for( int i = 0, n = values.length; i<n; i++ ){
    			buffer.append( values[i] );
    			if( i+1 < n )
    				buffer.append( ", " );
    		}
    		System.out.println( buffer );
    	}
    	else{
    		for( int i = 0, n = values.length; i<n; i++ ){
    			if( !contains( values, index, i+1 )){
    				values[index] = i+1;
    				permute( values, index+1 );
    			}
    		}
    	}
    }
    
    private static boolean contains( int[] values, int length, int search ){
    	for( int i = 0; i < length; i++ )
    		if( values[i] == search )
    			return true;
    		
    	return false;
    }
}
 
G

Gast

Gast
wie shuffelt man denn elemente und wie baue ich dieses set auf??

ich habe ja den etwas umständlichen weg der 4 methoden gewählt, weil ich keine idee hatte, wie ich sonst alle permutationen bestimmen kann..
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Hilfe gesucht Java Basics - Anfänger-Themen 11
Scappy Java Lernpartner gesucht! Java Basics - Anfänger-Themen 40
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
I Wasserzeichen API gesucht Java Basics - Anfänger-Themen 2
S Anfängeraufgaben gesucht Java Basics - Anfänger-Themen 29
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
R OOP Einfaches Programmierbeispiel für Assoziation, Aggregation und Komposition gesucht Java Basics - Anfänger-Themen 10
S ProgrammierHilfe dringend gesucht ( Icon bewegen) Java Basics - Anfänger-Themen 9
W Neues Lern-Projekt gesucht Java Basics - Anfänger-Themen 8
CT9288 Permanent laufender loop mit Eingabefunktion gesucht Java Basics - Anfänger-Themen 1
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
der_Schokomuffin Hilfe gesucht: String wird auf null gesetzt! Java Basics - Anfänger-Themen 17
O Lösungsansatz gesucht Java Basics - Anfänger-Themen 4
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
W Erste Schritte Rechnen mit Schleifen? Denkanstoß gesucht Java Basics - Anfänger-Themen 15
V Erste Schritte Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule Java Basics - Anfänger-Themen 9
R Spotify API gesucht Java Basics - Anfänger-Themen 3
M Java Insel Aufgaben von der DVD gesucht Java Basics - Anfänger-Themen 2
M Open Source Projekt mit Unit Tests gesucht Java Basics - Anfänger-Themen 5
T Gesucht: Tutorial im Anschluß an Gailer-net bzw. Bradley Kjell Java Basics - Anfänger-Themen 0
Salo Datentypen "Doppelt" List(e) ("gesucht") Java Basics - Anfänger-Themen 6
D Array mit Zufallszahlen, dann sortieren: Hilfe gesucht! Java Basics - Anfänger-Themen 1
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
cyro Best Practice Bessere Alterative zu ArrayList gesucht Java Basics - Anfänger-Themen 3
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
E Event gesucht Java Basics - Anfänger-Themen 1
D Kürzel für a = a && b gesucht Java Basics - Anfänger-Themen 12
E Hilfe zur Performance Verbesserung gesucht Java Basics - Anfänger-Themen 1
A Best Practice Ideen für kleines Anfängerschulprojekt gesucht Java Basics - Anfänger-Themen 4
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
C Hilfe für Spielerweiterung gesucht Java Basics - Anfänger-Themen 4
C Hilfe für Kommentar-Zapper gesucht / Umgang mit Console Java Basics - Anfänger-Themen 0
M Datenstruktur gesucht Java Basics - Anfänger-Themen 3
S Projekt-Idee für testgetriebene Entwicklung gesucht Java Basics - Anfänger-Themen 2
G Möglichkeit zum Auslesen von Webseiten gesucht. Java Basics - Anfänger-Themen 10
K Gutes Java 3D Game Tutorial gesucht Java Basics - Anfänger-Themen 6
O Java - "Learning by doing" - Übungsaufgaben gesucht. Java Basics - Anfänger-Themen 5
F JavaLernpartner gesucht Java Basics - Anfänger-Themen 13
J Erste Schritte Java "Lehrer" gesucht Java Basics - Anfänger-Themen 22
K Hamstersimulator / Hamster Modell Lösungen gesucht Java Basics - Anfänger-Themen 3
J Erste Schritte If-Else Idee gesucht Java Basics - Anfänger-Themen 6
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
P Java anfänger tutorial gesucht Java Basics - Anfänger-Themen 12
M Sortieralgoritmus für großes Array gesucht Java Basics - Anfänger-Themen 10
P Kontrollstrukturen Ergebnis gesucht Java Basics - Anfänger-Themen 10
S Mathe Lib gesucht Java Basics - Anfänger-Themen 2
B Regulärer Ausdruck gesucht Java Basics - Anfänger-Themen 6
D Java Quiz gesucht Java Basics - Anfänger-Themen 7
G Regex für 1 und 2 gesucht Java Basics - Anfänger-Themen 18
A Befehl gesucht....wie komme ich an Folgendes Objekt? Java Basics - Anfänger-Themen 6
R Passende Collection gesucht Java Basics - Anfänger-Themen 11
Y Regexp gesucht Java Basics - Anfänger-Themen 6
R Java-Anfänger-Projekt-Begleiter gesucht Java Basics - Anfänger-Themen 18
Binary.Coder Bluej ähnlicher Inspektor gesucht Java Basics - Anfänger-Themen 3
C Klassen Array-Klasse gesucht Java Basics - Anfänger-Themen 4
J "Java 2 Standart Edition SDK" Gesucht Java Basics - Anfänger-Themen 4
C Buch für Einsteiger gesucht Java Basics - Anfänger-Themen 2
M einfache Übungsaufgaben gesucht Java Basics - Anfänger-Themen 7
D Quelle für Java-Grundlagen gesucht Java Basics - Anfänger-Themen 16
T Datentypen Liste für boolean gesucht Java Basics - Anfänger-Themen 4
D GGT - Codeerklärung gesucht Java Basics - Anfänger-Themen 26
S Datentypen geignetes java konstrukt gesucht Java Basics - Anfänger-Themen 5
U OOP Tutorials gesucht Java Basics - Anfänger-Themen 4
D gesucht: Map nur mit doppelten Keys Java Basics - Anfänger-Themen 10
V Datentypen Methode gesucht, String zu Double mit Rechenoperatoren Java Basics - Anfänger-Themen 11
Tandibur sinnvolles Speichermodell gesucht Java Basics - Anfänger-Themen 6
M Lösungsansatz für Aufgabe gesucht. Java Basics - Anfänger-Themen 21
A Regex gesucht Java Basics - Anfänger-Themen 2
B Alternative zu einem Array gesucht Java Basics - Anfänger-Themen 3
S kreative Schlaue funktion für optionsfeld (html) gesucht... Java Basics - Anfänger-Themen 4
T Komplexität gesucht Java Basics - Anfänger-Themen 10
N Hibernate "Hello World" Tutorial gesucht Java Basics - Anfänger-Themen 9
O RegEx-Ausdruck gesucht Java Basics - Anfänger-Themen 2
U Icon mit Pfeil und Menupunkten gesucht Java Basics - Anfänger-Themen 3
E Methode gesucht die eine Abfolge von Ereignissen festsetzt. Java Basics - Anfänger-Themen 3
G Datenstruktur gesucht Java Basics - Anfänger-Themen 14
O Mal wieder ein Regex-Ausdruck gesucht! Java Basics - Anfänger-Themen 5
N Flexiblen Datenspeicher (Array... oder so) gesucht Java Basics - Anfänger-Themen 6
D Java Tutorial zur Netzwerk / Datenbankprogrammierung gesucht Java Basics - Anfänger-Themen 2
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
O Regulärer Ausdruck gesucht Java Basics - Anfänger-Themen 2
chewbacca Literaturempfehlung gesucht. Java Basics - Anfänger-Themen 2
M Kombinatorik - Algorithmus gesucht Java Basics - Anfänger-Themen 35
A Regex gesucht Java Basics - Anfänger-Themen 3
E Java Einführung gesucht. Java Basics - Anfänger-Themen 7
G TrayIcon für JSF-Applikation -> Tutorial gesucht Java Basics - Anfänger-Themen 4
T Designpattern gesucht Java Basics - Anfänger-Themen 3
J Nachhilfe oder Ähnliches gesucht ! Programm für Berchng. ! Java Basics - Anfänger-Themen 7
G Zugriff auf Webservice -> Tutorial gesucht Java Basics - Anfänger-Themen 2
A Tutorial zur Datenbankanbindung gesucht Java Basics - Anfänger-Themen 2
Q Beste Komponenten für 3-Schichten-Architektur gesucht Java Basics - Anfänger-Themen 7
D Übungsaufgaben gesucht Java Basics - Anfänger-Themen 4
M Zwei Lösungsvorschläge für eine Aufgabenstellung gesucht Java Basics - Anfänger-Themen 3
H Konstruktor gesucht Java Basics - Anfänger-Themen 6
1 Ansatz/Hilfe für ein Tool gesucht Java Basics - Anfänger-Themen 4
G Rätsel: Vorschlag für einen sinnvollen Algorythmus gesucht. Java Basics - Anfänger-Themen 13
G Idee bzw. Hilfe gesucht Java Basics - Anfänger-Themen 6
U ArrayIndexOutOfBoundsException - dringend Hilfe gesucht Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben