2011-12-26 11 views
0
の新しいインスタンス

私は以下のクラスで自分の側面を格納することにより、三角形を作成するプログラムを作成しようとしています:名前のJava

class Triangle { 
    private int[] sides; 

    public Triangle(int x, int y, int z) { 
     sides = new int[] {x,y,z}; 
     Arrays.sort(sides); 
    } 

    @Override public boolean equals(Object o) { 
     return o instanceof Triangle && Arrays.equals(sides, ((Triangle) o).sides); 
    } 

    @Override public int hashCode() { 
     return Arrays.hashCode(sides); 
    } 

    @Override public String toString() { 
     return Arrays.toString(sides); 
    } 
} 

問題は、私はの新しいインスタンスを作成する方法がわからないということですこれらの三角形はループからforです。例えば、私はforループを使って3つの数字のGCDを比較しているので、新しい三角形をセットに追加したいとします(hereを参照)。私はすべての方法を知っていると信じていますが、ループの途中で三角クラスの一意のインスタンスを作成する方法がないため、クラスの新しいインスタンスを作成します。

これを行う方法はありますか?

+5

「命名規則」と関係がありますか? –

+2

質問のタイトルは内容と関係がありません。それを編集してください。 –

答えて

3

これを試してみてください:

Set<Triangle> myTriangles = new LinkedHashSet<Triangle>(); 
for (something here) { 
    myTriangles.add(new Triangle(a, b, c)); 
} 

セットが自動的に重複を避けることができます。

+0

素晴らしい。私は他人に答える時間があることを確認しますが、私はこれを実装します。 – nmagerko

+0

プログラム終了時に追加されたmyTrianlgesの数を確認する方法はありますか? – nmagerko

+0

@nmagerko:(http://stackoverflow.com/questions/8620052/check-to-see-if-an-object-has-been-created/8620100#8620100)へのリンクを提供した回答のコードは、ほぼ正確にこれを行います... –

1

私はあなたがコンストラクタでオブジェクトを初期化する方法を間違えたと思います。 まあ、間違いよりも、私はデザインの問題を言うでしょう。

すべての三角形は3つの側面を持っているので、なぜあなただ​​け言ういけない:あなたは、クラストライアングルのオブジェクトを作成するときに

public Triangle(int x, int y, int z) { 
     sides = new int[3]; 

     sides[0] = x; 
     sides[1] = y; 
     sides[2] = z; 
    } 

はその後、あなたはそれにパラメータを渡します。あなたはループの中でそれをしたい場合は、このような何かを行うことができます:あり

public static void main(String [] args) { 

    Scanner sc = new Scanner(System.in); 
     System.out.print("How many triangles do you want?") 
    int noOfTriangles = sc.nextInt(); 

    Triangle[] triangles = new Triangle[noOfTriangles]; 

    for(int i = 0; i < triangles.length; i++) { 
      System.out.print("Creating triangle " + (i+1)) 
      System.out.print("Enter a value for side X") 
      int x =sc.nextInt(); 
      System.out.print("Enter a value for side Y") 
      int y =sc.nextInt(); 
        System.out.print("Enter a value for side Z") 
      int z =sc.nextInt(); 

      triangles[i] = new Triangle(x,y,z); 
    } 

} 

あなたが設定したすべての初期化オブジェクトと値を持つ三角形の配列を持っている今行きます。

+0

私は、私が望む三角形がいくつあるのか分かりません。あなたが示唆していることは、私がすでに結果を知っていることですが、私はそうではありません。 – nmagerko

+0

彼は新しい三角形(2,3,4).equals(新しい三角形(3,2,4))== trueを保証するために側面をソートします。 –

1

私はもう一方の記事を読んで、a running code of my ownを追加しました。おそらくあなたはそこを見なければなりません。それは三角形とすべてを生成します。 とにかく、これは "命名規則"の問題ではなく、質問を「Javaでインスタンスを作成する方法」に変更した場合、おそらく適切なフィードバックを得るでしょう。

(あなたがリンクをクリックするような気がしない場合)、私はそこに書いた完全なコードはここにもあり、あなたが記入するために他の人が残って空白を埋める必要があります。これは何を持っているん

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Set; 
public class Triangle 
{ 
    private int[]sides; 
    public Triangle(int x, int y, int z) 
    { 
     sides = new int[]{x,y,z}; 
     Arrays.sort(sides); 
    } 

    public Triangle(String ... args) 
    { 
     this(Integer.parseInt(args[0].trim()), Integer.parseInt(args[1].trim()), Integer.parseInt(args[2].trim())); 
    } 

    @Override 
    public boolean equals(Object o) 
    { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     Triangle triangle = (Triangle) o; 

     if (!Arrays.equals(sides, triangle.sides)) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() 
    { 
     return sides != null ? Arrays.hashCode(sides) : 0; 
    } 

    @Override 
    public String toString() 
    { 
     return "Triangle{" + 
         "sides=" + Arrays.toString(sides) + 
         '}'; 
    } 

    public static void main(String[] args) throws IOException 
    { 

     String[] input = new String[]{ "1,2,1" , "1,1,2", "1,2,3","1,3,1","1,1,1","1,3,3","1,1,3"}; 

     Set<Triangle> triangles = new HashSet<Triangle>(); 
     for (String s : input) 
     { 
      triangles.add(new Triangle(s.split(","))); 
     } 
     System.out.println("triangles = " + triangles); 
    } 
} 
+0

あなたは明らかにこのサイトを理解していません。ここで質問する人は、Java開発者である必要はありません。私は絶対にその意味でのあなたの侮辱を感じています。私はまたあなたに「答え」を与えることに感謝しません(それは間違っています)。答えにユーザーを誘導し、答えを与えないでください。 – nmagerko

+0

本当に申し訳ありませんが、私はそういう意味ではありませんでした。他の回答を読んでいる間、私は彼らがあまりにも小さなコードを与えて、彼らが満たされるという仮定の下で余りにも多くの空白を残しているという気持ちを持っています。私は単にそれを想定していないという事実を強調しようとしました。私はJava開発者でないことが間違っているとは決して言わず、誰にも侮辱するつもりは全くありませんでした。あなたがコメントした行を削除し、侮辱的かもしれない他のテキストを喜んで削除します。私は正常に自分のコードを実行し、誰かが同じことをしなかった場合に助けてうれしいです。 –

関連する問題