【问题标题】:Constructors usage in Java for beginners [closed]初学者在Java中使用构造函数[关闭]
【发布时间】:2013-02-03 08:27:32
【问题描述】:

目标 -

尝试创建具有少量函数的类 - 创建数组并对其进行一些操作 现在我希望用户输入数组的长度并将其返回给用户

做了什么? -

创建的类:

public class Array {
    private int myArray[];
    private int count;

    Array(int length){
        myArray = new int[length];// create mas of diff length
        count =0 ; // count q-ty of elements
    }

    //array out
    public static void outArray(int array[]){
        int length = array.length;
        for (int i=0; i<length+1; i++){
            System.out.println("Element number ["+i+"] is ["+ array[i]+"]");
        }
    }

还有主要的:

public static void main(String[] args) throws IOException {
    System.out.println("What length of your array? []");
    Array matrix = new Array(Array.getCharToInt());
    Array.outArray(matrix);
....

发生了什么 -

这里我有一些问题 Array.outArray(矩阵);

问题 -

我在哪里做错了?也尝试了很多变体,但无法理解我做错了什么。


更改获取数组实例的函数,但现在我的方法有问题.. - 无法获取数组的长度`

Array(int length){
    myArray = new int[length];// create mas of diff length
    int myLength=myArray.length;
}

//array out
public static void outArray(Array array){
    int length = array.myLength; - cant do like this - "myLength cannot be resolved or is not a field".

我想如果我在构造函数中添加一些字段,我可以使用它还是我做错了什么?

【问题讨论】:

  • 究竟什么是“一些问题”?
  • 您的 outArray 函数不采用 Array 实例,而是采用实际的 int 数组。把它修好,你会没事的。
  • 了解您想要做什么也会有所帮助。 “用它做一些操作”太模糊了。
  • 您还想删除i&lt;length+1 之后的+1,因为如果您尝试运行该程序,您会得到一个ArrayIndexOutOfBoundsException
  • 改变方法 - 见后面的问题

标签: java arrays methods constructor


【解决方案1】:

定义数组的正确方法是:

private int[] myArray;

所以你的构造函数和类将是:

public class Array {
private int[] myArr;
private int count;

public Array(int length) {
    myArr = new int[length];
    count = 0;
}

public int[] getInnerArray() {
    return myArr;
}

public static void processArray(Array array) {
    int[] innerArray = array.getInnerArray();
    int length = innerArray.length;
    for (int i=0; i<length; i++) {
        System.out.println("Next [" + i + "] is - " + innerArray[i]);
    }
}

但你也可以将 public static void processArray(Array array) 方法更改为实例方法:

 public void processArray() {
    int[] innerArray = myArr;
    int length = innerArray.length;
    for (int i=0; i<length; i++) {
        System.out.println("Next [" + i + "] is - " + innerArray[i]);
    }
}

主要功能是:

public static void main(String[] arg) {
    System.out.println("What length of your array? []");
    Array matrix = new Array(666);
    matrix.processArray();
}

【讨论】:

    【解决方案2】:

    首先,我建议您仔细阅读 Perception 和 Java 的帖子。对于“myLength 无法解决或不是字段”的问题,是因为您正在调用 array.myLength。 myLength 是您在调用 Array 类时创建的变量。请记住,每次调用类的新实例时,它们都是分开的。如果您想在一个类中使用不同的方法,请在您的主项目类中创建该类的一个实例,即..您还在 Array 类中使​​用从未使用过的私有变量声明。

    java.lang.reflect.Array 中也已经有一个名为“Array”的类。如果您尝试创建自己的类而不是覆盖类中的方法,您可能还需要考虑重命名 Array 类。然后执行以下操作:

    public static void main(String[] args) throws IOException {
    MyArrayClass mAC = new MyArrayClass;
    System.out.println("What length of your array? []");
    int[] matrix = new int[mAC.getCharToInt()];
    mAC.outArray(matrix);
    

    然后将您的 outArray 方法更改为

    public static void outArray(int array[]){
    int length = array.length;
    for (int i=0; i<length; i++){
    System.out.println("Element number ["+i+"] is ["+ array[i]+"]");
    }
    

    我喜欢使用私有变量,您尝试过使用,但是您还需要实现 getter 和 setter 方法来获取变量。

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      相关资源
      最近更新 更多