如何在java面向对象编程中使用动态数组?

时间:2015-12-14 04:02:44

标签: java arrays oop dynamic average

我尝试使用Java编程语言创建程序,该程序可以使用面向对象的编程概念来计算输入的平均值。当我使用静态数组的程序运行正常,但是当我尝试设置数组时,动态程序会出错。如何使用面向对象的编程概念动态设置数组?

这是带有静态数组的程序

public class Avg {

private int n;

 private int[] value = new int[3];

public int getN() {
    return n;
}

public void setN(int n) {
    this.n = n;
}

public int getValue(int number) {
    return this.value[number];
}

public void setValue(int number, int value) {
    this.value[number] = value;
}        

public double getAverage(){
    int i = 0;
    double total = 0;
    for(i=0;i<getN();i++){
        total = total+value[i];
    }
    return (total/getN());
}

   public double getAverage(){
    int i = 0;
    double total = 0;
    for(i=0;i<3;i++){
        total = total+value[i];
    }
    return (total/3);
    }

import java.util.*;
public class driver {
public static void main(String[] args) {
    Avg klas = new Avg();
    int i,number = 0, value = 0;        
    Scanner prak = new Scanner(System.in);
    System.out.println("enter the number of sequence :");        
    int n = prak.nextInt();
    for(i=0;i<n;i++){
            System.out.println("sequence of : " + (i+1));                 
            System.out.println("enter the value : ");                                
             value = prak.nextInt();
    }
    klas.setValue(number, value);  
    System.out.println(klas.getAverage());
}
}

这是使用动态数组的程序

public class Avg {            
private int n;

private int[] value = new int[getN()];


public int getN() {
    return n;
}

public void setN(int n) {
    this.n = n;
}

public int getValue(int number) {
    return this.value[number];
}

public void setValue(int number, int value) {
    this.value[number] = value;
}        

public double getAverage(){
    int i = 0;
    double total = 0;
    for(i=0;i<getN();i++){
        total = total+value[i];
    }
    return (total/getN());
} 

import java.util.*;
public class driver {
public static void main(String[] args) {
    Avg klas = new Avg();
    int i,number = 0, value = 0;        
    Scanner prak = new Scanner(System.in);
    System.out.println("enter the number of sequence :");
    klas.setN(prak.nextInt());         
    for(i=0;i<klas.getN();i++){
            System.out.println("sequence of : " + (i+1));                 
            System.out.println("enter the value : ");                                
             value = prak.nextInt();
    }
    klas.setValue(number, value);  
    System.out.println(klas.getAverage());
}
}

当我运行程序时使用动态数组我得到了错误

enter the number of sequence :
2
sequence of : 1
enter the value : 
4
sequence of : 2
enter the value : 
5
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
            at wksenin.Avg.setValue(Avg.java:31)
            at wksenin.driver.main(driver.java:26)
    Java Result: 1

但是当使用静态数组时程序运行良好:

enter the number of sequence :
3
sequence of : 1
enter the value : 
4
sequence of : 2
enter the value : 
5
sequence of : 3
enter the value : 
3
1.0 
  

如何在java OOP中使用动态数组?

1 个答案:

答案 0 :(得分:3)

初始化value后,您需要初始化n数组。 你可以这样做:

private int[] value;

public void setN(int n) {
   this.n = n;
   values = new int[n];
}

更安全的方法是定义一个接受n值作为参数的构造函数。

private int[] value;

public Avg(int n){
   this.n = n;
   values = new int[n];
}