【问题标题】:How to use dynamic array in java Object Oriented Programming?如何在Java面向对象编程中使用动态数组?
【发布时间】:2015-12-14 04:02:44
【问题描述】:

我尝试使用 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中使用动态数组?

【问题讨论】:

    标签: java arrays oop dynamic average


    【解决方案1】:

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

    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];
    }
    

    【讨论】:

    • 它有效!谢谢提图斯。但是,我可以问你如何获得输入的平均值吗?我以前使用过这个函数,但它不返回平均值: public int getAverage(){ int i = 0;整数 = 0; for(i=0;i
    • @MuhammadFadliFaturzaman 由于value 数组大小可以是3 以外的其他值,因此在getAverage() 方法中,您应该将3 替换为value.length
    • @MuhammadFadliFaturzaman 它应该是`total = total + getValue(i);` 而不是`total = getValue(i) + getValue(i);`
    • 完成,但仍然没有返回平均值'public int getAverage(){ int i = 1;整数 = 0; for(i=0;i
    • @MuhammadFadliFaturzaman 您需要将这个klas.setValue(number, value); 移动到for 循环内(最后)并将其更改为klas.setValue(i, value);
    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2022-10-05
    相关资源
    最近更新 更多