2017-10-16 4 views
-2

Ich habe dieses Programm, das ich arbeite, und es greift auf eine andere Klasse für variable Benennung zu. Im Grunde gibt es den Namen der Organisation, wie viel sie pro Jahr machen, und ob sie für Profit sind oder nicht. Am Ende müssen wir alle Informationen für jede Organisation ausdrucken. So wie es aussieht, funktioniert es, aber es muss einen Weg geben, es zu einer for-Anweisung zu verkürzen.Notwendigkeit, Code zu kondensieren, Code ist nicht trocken

out.println(Organization1.name); 
out.println("$"+Organization1.revenue); 
out.println("For Profit: "+Organization1.profit); 
out.println(); 
out.println(Organization2.name); 
out.println("$"+Organization2.revenue); 
out.println("For Profit: "+Organization2.profit); 
out.println(); 
out.println(Organization3.name); 
out.println("$"+Organization3.revenue); 
out.println("For Profit: "+Organization3.profit); 
out.println(); 
out.println(Organization4.name); 
out.println("$"+Organization4.revenue); 
out.println("For Profit: "+Organization4.profit); 
out.println(); 
out.println(Organization5.name); 
out.println("$"+Organization5.revenue); 
out.println("For Profit: "+Organization5.profit); 
out.println(); 
out.println(Organization6.name); 
out.println("$"+Organization6.revenue); 
out.println("For Profit: "+Organization6.profit) 
+2

Besser fragen Sie auf https://codereview.stackexchange.com/ –

+0

Nun, wenn "Organisation1" usw. alle Instanzen der gleichen Klasse sind, dann sehen Sie sich Ihren Code und versuchen, ein Muster zu erkennen. Sie könnten wahrscheinlich das Ganze in ein paar Zeilen schreiben. Übrigens impliziert "Organisation1" einen Klassennamen, aber es ist wahrscheinlich ein Variablenname. In diesem Fall sollten Sie einen Kleinbuchstaben wie "organisation1" verwenden. Außerdem wäre die Nummerierung der Namen mit einer Liste oder einem Array besser. – Thomas

+2

Setzen Sie alle 'Organisation's in eine Liste (und nennen Sie sie vielleicht'organizationsList'), dann machen Sie etwas wie 'for (Organisation o: organizationsList) {System.out.println (" Organisation \ "" + o.name + "\" $ + o.revenue + ", für Profit:" + o.profit); } ' – deHaar

Antwort

1

Aufschalten Organization.toString() und nur println(organization).

+0

Was ist, wenn' toString() 'etwas anderes zurückgeben muss? Sie möchten möglicherweise nicht alle diese Informationen jedes Mal drucken, wenn Sie eine Organisation drucken müssen. – Thomas

+1

@Thomas Dann schreibe eine benutzerdefinierte Methode. – Patrick

+0

Nun, was ist, wenn die OP-Methode diese benutzerdefinierte Methode ist? – Thomas

0

Verwenden Class.forName („ClassDemo“), um die Klasse zu nennen und die den Namen, Umsatz und Gewinn

Zum Beispiel innerhalb der for-Schleife

System.out.println(Class.forName("Organization"+i).name) 
System.out.println(Class.forName("Organization"+i).revenue) 
System.out.println(Class.forName("Organization"+i).profit) 

Lesen Sie das folgende Dokument erhält für weitere Informationen https://www.tutorialspoint.com/java/lang/class_forname_loader.htm

+1

Beachten Sie, dass obwohl der OP-Code aussieht, er 6 Klassen verwendet, die nicht viel Sinn machen würden, da sie alle die gleichen Felder usw. haben. Daher sind es eher Variablennamen. Aber selbst wenn er 6 Klassen hat, dann ist die Verwendung von Reflektion, um ein falsches Design zu umgehen, nicht die klügste Methode, zumal das OP nicht so gut in Java zu sein scheint (wahrscheinlich Programmierung im Allgemeinen) und es ihm sagt Reflexion zu benutzen wäre, als würde man einem Kind eine Pistole geben, um eine Dose Cola zu öffnen. – Thomas

+0

hmmm einverstanden !!! versuchen Sie, beim nächsten Mal verantwortungsvoller zu sein –

1

auf meinen Kommentar Aufweiten, ich nehme an, Sie eine Klasse, die wie folgt aussieht:

class Organization { 
    String name; 
    int revenue; //guessing the type 
    double profit; //guessing the type 
} 

So würden Sie wahrscheinlich eine Liste von Organisationen wollen:

List<Organization> orgs = ...; //initialize the list of your 6 organizations here 

Dann könnten Sie Ihren Code wie diese (eine Möglichkeit) schreiben:

boolean first = true; 
for(Organization o : orgs) { 
    //if it's not the first entry then print an empty line first 
    if(!first) { 
    out.println(); 
    } 

    out.println(o.name); 
    out.println("$" + o.revenue); 
    out.println("For Profit: " + o.profit); 

    first = false; 
} 

Hinweis, dass es andere Möglichkeiten, Drucke das, z mit Java 8 Streams oder anderen Dienstprogrammen, aber ich lasse diese für Sie zu erkunden.

1

Patrick Antwort ist korrekt.
Aber Sie sollten auch bedenken, dass toString() eine Debugging-Zweck-Methode ist.
Sie sollten vermeiden, ein bestimmtes Format zu verwenden.

In Organization, könnten Sie ein Verfahren einzuführen, um die aktuelle Instanz zu drucken:

public void print() 
    out.println(name);` 
    out.println("$"+revenue);` 
    out.println("For Profit: "+profit);` 
    out.println();` 
} 

Jetzt können Sie auf jedem von der Methode aufrufen:

Organization1.print(); 
Organization2.print(); 
Organization3.print(); 
Organization4.print(); 
Organization5.print(); 
Organization6.print(); 

Oder besser, fügen Sie sie in ein List und iterieren, um jeden von ihnen zu drucken:

List<Organization> organizations = Arrays.asList(Organization1, Organization2, ...);  
organizations.stream().forEach(Organization::print); 
0

Ich denke, dass Sie alle Klassen Organisation1-6 neu schreiben können, um eine Elternklasse namens Organisation zu erweitern, die eine Methode show() und den Namen, Umsatz, Gewinneigenschaften hat, und innerhalb der show() -Methode können Sie alle Informationen, die Sie haben möchten, und jedes Objekt der Unterklasse kann auch eine Methode als Alternative

1

diese Methode aufrufen toString() zu überschreiben erwägen sollte, die eine Zusammenfassung der Klasse als String zurückgibt:

public String getSummary() { 
     StringBuffer sb = new StringBuffer(); 
     sb.append(name); 
     sb.append("\n$"+revenue); 
     sb.append("\nFor Profit: "+profit); 
     return sb.toString(); 
    } 

Dann können Sie einfach Iterieren Sie über Organisationen, um die Zusammenfassung zu drucken:

for(Organization organization: organizationList) 
     System.out.println(organization.getSummary()); 
Verwandte Themen