java数组用于构造函数的固定元素

时间:2017-11-08 18:27:54

标签: java arrays constructor setter custom-exceptions

我正在用java编写我的第一个类。

我做了一个带有int []的类,必须用3个元素声明。

public abstract class MyClass {
   private String name;
   private int[] myValues = new int[2];

现在我的问题是:

  1. 确保用户必须插入每个成员的最佳方法是什么?
  2. 然后.. 构造函数是执行此操作的最佳方法,因此我使用明确要求的每个元素执行构造函数:

    public MyClass(String nam, int val0, int val1, int val2){
       int[] values = new int[]{val0, val1, val2};
       setMyValues(values);
    }
    
    private void setMyValues(int[] vals){
       this.myValues = vals;
    }
    
    1. 这是一个好习惯吗?似乎很复杂,而不是给出一个简单的数组:

      public void MyClass(int[] vals)..
      

      但是通过这种方式我无法确定元素的数量。我应该创建一个自定义异常或if(vals.length!= 2)cicle ..

    2. 我还有其他一些疑问:

      1. 用于声明myValues = new int [2],或者只是简单地编写int [] myValues? (为什么要声明内部状态中的元素数量?)

      2. 最好从构造函数接收参数或将向量传递给setter(setMyValues(int [] vals))并在setter中检查数组?

      3. 坦克你的每一个建议。

2 个答案:

答案 0 :(得分:1)

  1. 你可以有一个重载的构造函数,一个带有三个整数的构造函数 值和一个数组。在第一个构建一个数组和 将它传递给数组构造函数,在第二个构造函数内调用setter 并评估长度,如果长于三个扔 异常。
  2. 您正在分配一个从未使用过的对象,浪费空间,并在分配新阵列后由GC收集。我没有为该财产分配任何东西。
  3. 这取决于你的方法。您可以转到第一个点并添加第三个默认构造函数,然后使用setter方法设置数组。
  4. 希望得到这个帮助。

答案 1 :(得分:1)

public class MyClass {

    private String name;
    private int[] myvalues = new int[3]; 
    //you want the array to hold 3 elements so the size should be 3

    //constructor
    public MyClass(String name) {
        this.name = name; // each instance is defined by a name 

        System.out.println("enter 3 values, each on a line");
//3
//4
//5
        for(int i = 0; i < 3 ;i++) {// loop restricts the user to 3 elements
            Scanner console = new Scanner(System.in); // import Scanner
            this.myvalues[i] = console.nextInt();
        }
//myvalues = {3,4,5}

    }

    public static void main(String[] args) {

        MyClass C = new MyClass("Points of triangle");
    }
}

您需要声明数组的大小以避免空指针异常。 这样,您可以使用用户

中的数组元素声明不同的对象

请注意 如果您希望用户在同一行输入

    System.out.println("enter 3 values on a line separated by space");
//3 4 5

    Scanner console = new Scanner(System.in); // import Scanner
    for (int i = 0; i <3 ; i++) {
        this.myvalues[i] = console.nextInt();
    }
}
//myvalues = {3,4,5}