2017-10-16 5 views
-2

私はこのプログラムを使用していますが、変数ネーミングの別のクラスにアクセスしています。基本的には、組織名、1年あたりの金額、利益のためのものかどうかなどがあります。最後に、各組織のすべての情報を印刷する必要があります。それが現れているので、それは働いていますが、それをforステートメントに短縮する方法がなければなりません。コードを凝縮する必要があります。コードは乾燥していません。

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

https://codereview.stackexchange.com/ –

+0

「Organization1」などがすべて同じクラスのインスタンスである場合は、コードを見てパターンを見つけようとします。おそらく全体を数行で書くことができます。そしてbtw、 'Organization1'はクラス名を意味しますが、おそらく変数名である場合、' organization1'のように小文字の名前を使うべきです。さらに、名前の番号を付けることは、リストまたは配列を使用する方が良いことを示します。 – Thomas

+2

すべての 'Organization'をリストに入れて(おそらく' organizationsList'と名づけます)、 'for(Organization o:organizationsList){System.out.println(" Organization \ "" + o.name + "\" $ "+ o.revenue +"、利益: "+ o.profit); } ' – deHaar

答えて

1

オーバーライドOrganization.toString()だけprintln(organization)

+0

' toString() 'が別のものを返す必要がある場合はどうなりますか?組織を印刷する必要があるたびに、その情報をすべて印刷したくない場合があります。 – Thomas

+1

@Thomasその後、カスタムメソッドを作成します。 – Patrick

+0

さて、もしOPメソッドがそのカスタムメソッドならどうでしょうか? – Thomas

0

使用Class.forNameの(「ClassDemo」)クラスを呼び出し、例えば名前、収益および利益

を取得し、forループ

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

内の詳細については、以下のドキュメントを読むために私のコメントに拡大 https://www.tutorialspoint.com/java/lang/class_forname_loader.htm

+1

OPのコードは、6つのクラスを使用しているように見えますが、それらはすべて同じフィールドなどを持っているため、あまり意味がないでしょう。しかし、彼が6つのクラスを持っていても、間違ったデザインを回避するためにリフレクションを使用することは、特にOPがJavaに堪能ではないように思われます反射を使うことは、子供に銃を渡してコークスの缶を開けるようなものです。 – Thomas

+0

hmmm agree !!!次回より責任を果たそうとする –

1

、私はあなたがこのようになりますクラスを持っていると仮定します。

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

したがって、あなたはおそらく組織のリストをしたいと思います:

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

次にあなたがこの(1つの可能な方法)として、あなたのコードを書くことができます:への他の方法があることを

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; 
} 

注意それを印刷するJava 8ストリームやその他のユーティリティを使用していますが、私はそれらを残しておきます。

1

パトリックの答えは正しいです。
しかし、toString()はデバッグ目的のメソッドであることも考慮する必要があります。
で特定の形式を使用しないでください。、

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

またはそれ以上にそれらを追加:あなたは一人一人にメソッドを呼び出す今

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


Organizationでは、現在のインスタンスを印刷する方法を紹介することができListをオンにして、それぞれを印刷します。

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

私は、すべてのクラスOrganization1-6を書き換えて、show()メソッドと名前、収益、利益プロパティを持つOrganizationという親クラスを拡張し、show()メッシュ内ですべての情報をprintlnできますあなたは、単にすることができ、その後

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

:欲しい、とサブクラスのすべてのオブジェクトは、Stringとしてクラスの概要を返すメソッドを作成することを検討toString()を上書きする代わりに、この方法も

1

を呼び出すことができます組織全体を繰り返して要約を印刷します。

for(Organization organization: organizationList) 
     System.out.println(organization.getSummary()); 
関連する問題