我尝试使用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中使用动态数组?
答案 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];
}