繁体   English   中英

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

[英]java array fixed element for constructor

我正在用Java编写我的第一类。

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

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

现在我的问题是:

  1. 确保用户必须插入每个成员的最佳方法是什么?

然后,。构造函数将是最好的方法,因此我对每个明确需要的元素进行了构造:

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。

我还有其他疑问:

  1. 声明myValues = new int [2]很有用,还是简单地编写int [] myValues一样吗? (为什么要声明内部状态下的元素数量?)

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

给你每一个建议。

  1. 您可能有一个重载的构造函数,一个带有三个整数值,另一个带有数组。 在第一个方法上,构建一个数组并将其传递给数组构造函数,在第二个构造函数中,调用setter并计算长度,如果大于三个则抛出异常。
  2. 您正在分配一个从未使用过的对象,浪费了空间,分配了新数组后将由GC收集。 我什么都不会分配给该财产。
  3. 这取决于您的方法。 您可以先谈谈并添加第三个默认构造函数,然后使用setter方法设置数组。

希望能有所帮助。

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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM