用Java命名一个新实例

用Java命名一个新实例,java,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) { retu

我试图创建一个程序,通过将三角形的边存储在下面的类中来创建三角形:

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循环比较三个数字的GCD,然后我想在集合中添加一个新的三角形(已讨论)。我相信我知道如何创建这个类的新实例,因为在循环过程中,我无法创建triangle类的唯一实例

有什么方法可以做到这一点吗?

试试这个:

Set<Triangle> myTriangles = new LinkedHashSet<Triangle>();
for (something here) {
    myTriangles.add(new Triangle(a, b, c));
}
Set myTriangles=newlinkedhashset();
为了(这里的东西){
添加(新三角形(a,b,c));
}
该集合将自动避免重复。请尝试以下操作:

Set<Triangle> myTriangles = new LinkedHashSet<Triangle>();
for (something here) {
    myTriangles.add(new Triangle(a, b, c));
}
Set myTriangles=newlinkedhashset();
为了(这里的东西){
添加(新三角形(a,b,c));
}

集合将自动避免重复。

我认为您在构造函数中初始化对象时犯了一个小错误。 不仅仅是一个错误,我会说是设计问题

每个三角形都有三条边,你为什么不说:

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

}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
System.out.print(“您想要多少个三角形?”)
int noOfTriangles=sc.nextInt();
三角形[]三角形=新三角形[noOfTriangles];
对于(int i=0;i

现在,您有了一个三角形数组,其中所有对象都已初始化并设置了值。

我认为您在构造函数中初始化对象的方式犯了一个小错误。 不仅仅是一个错误,我会说是设计问题

每个三角形都有三条边,你为什么不说:

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

}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
System.out.print(“您想要多少个三角形?”)
int noOfTriangles=sc.nextInt();
三角形[]三角形=新三角形[noOfTriangles];
对于(int i=0;i

现在你有了一个三角形数组,所有对象都已初始化并设置了值。

我读了另一篇文章并添加了。 也许你应该看看那里。它生成三角形和所有东西。 无论如何,这不是一个“命名约定”问题,如果您将问题改为“如何在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 );
    }
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.array;
导入java.util.HashSet;
导入java.util.Set;
公共阶级三角
{
私人内部[]方;
公共三角形(整数x,整数y,整数z)
{
边=新的int[]{x,y,z};
数组。排序(边);
}
公共三角形(字符串…参数)
{
这(Integer.parseInt(args[0].trim())、Integer.parseInt(args[1].trim())、Integer.parseInt(args[2].trim());
}
@凌驾
公共布尔等于(对象o)
{
如果(this==o)返回true;
如果(o==null | | getClass()!=o.getClass())返回false;
三角形=(三角形)o;
如果(!array.equals(sides,triangle.sides))返回false;
返回true;
}
@凌驾
公共int hashCode()
{
返回边!=null?数组。哈希代码(边):0;
}
@凌驾
公共字符串toString()
{
返回“三角形{”+
“sides=“+Arrays.toString(sides)+
'}';
}
公共静态void main(字符串[]args)引发IOException
{
字符串[]输入=新字符串[]{“1,2,1”、“1,1,2”、“1,2,3”、“1,3,1”、“1,1,1”、“1,3,3”、“1,1,3”};
Set triangles=newhashset();
for(字符串s:输入)
{
三角形。添加(新三角形(s.split(“,”));
}
System.out.println(“triangles=“+triangles”);
}
}

我读了另一篇文章并添加了。 也许你应该看看那里。它生成三角形和所有东西。 无论如何,这不是一个“命名约定”问题,如果您将问题改为“如何在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 );
    }
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.array;
导入java.util.HashSet;
导入java.util.Set;
公共阶级三角
{
私人内部[]方;
公共三角形(整数x,整数y,整数z)
{
边=新的int[]{x,y,z};