回 帖 发 新 帖 刷新版面

主题:java  一道关于“计算多个圆环面积之和”的问题

偶是新手啦,觉得java很难,可是又不能不学。有题作业题,不是很会编。望各位路过的GG、MM们帮帮忙,thx!!
下面是我编的代码,可是不知道哪里错了!!



程序如下:

package totalarea;

/**
 *
 * @author Administrator
 */
 
public class TotalArea {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
      GoodRing[] ringArray;
       
       ringArray = createRingArray();
        
       printRingArray(ringArray);
    }
    
    public static GoodRing[] createRingArray(){
        
       GoodRing[] ringArray = new GoodRing[10];
       for(int i=0;i<ringArray.length;i++){
           ringArray[i] = new GoodRing(Math.random()*100);
           
    }
    
        return ringArray;
}
    public static void printRingArray(GoodRing[] ringArray){
        System.out.println("Radius1\t\t"+"Radius2\t\t"+"Area");
        for (int i=0;i<ringArray.length;i++ ){
            System.out.print(ringArray[i].getRadius1()+"\t\t"+ringArray[i].getRadius2()+"\t\t"+
                    ringArray[i].findArea()+'\n');
        }
        System.out.println("---------------- ");
        System.out.println("The tatal areas of GoodRings is \t "+
                sum(ringArray));
    }
    
    public static double sum(GoodRing[] ringArray ){
        double sum = 0;
        
     for(int i=0;i < ringArray.length;i++)   
        sum += ringArray[i].findArea();
        
    return sum;    
    }

}


 class GoodRing {
    private double radius1,radius2;
    
    public GoodRing(){
        radius1 = 3.0;
        radius2 = 2.0;
    }
    
    public GoodRing (double newRadius1,double newRadius2) {
        radius1 = newRadius1;
        radius2 = newRadius2;
    }

    GoodRing(double d) {
        GoodRing[] ringArray = new GoodRing[10];
    }

   public double getRadius1(){
        return radius1;
         }

    public double getRadius2(){
        return radius2;
    }
    
    public void setRadius(double newRadius1,double newRadius2){
        radius1 = (newRadius1 >= 0) ? newRadius1 : 0;
        radius2 = (newRadius2 >= 0) ? newRadius2 : 0;
    }
    
    public double findArea(){
        return (radius1*radius1-radius2*radius2)*Math.PI;
    }
}




运行结果是:

init:
deps-jar:
Compiling 1 source file to E:\JAVA\TotalArea\build\classes
compile-single:
run-single:
Radius1        Radius2        Area
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
0.0        0.0        0.0
---------------- 
The tatal areas of GoodRings is      0.0
成功生成(总时间:3 秒)

回复列表 (共3个回复)

沙发

你运行的结果全部为0,原因如下
1. 你先运行的是createRingArray();
2. 然后运行的GoodRing类中的GoodRing()构造函数
3. 然后在你的for循环中又重新调用GoodRing类中的GoodRing(double d)构造函数,此处的Radius1和Radius2是没有被付值的,所以Radius1==Radius2==0.0 (double型的默认值);
4. 因此你运行的结果全部为0


修改建议:
你可以在GoodRing类中的GoodRing(double d)构造函数里面调用setRadius(double,double)方法来给你的Radius1, Radius2 付新值

板凳

我还是不会编,请问你可不可以完整得帮我该一下,然后把可以运行的原代码发上来。谢谢

3 楼

我不知道你程序的目的是什么,以下改过后,Radius1=3.0,Radius2=2.0

package totalarea;

/**
 *
 * @author Administrator
 */
 
public class TotalArea {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
      GoodRing[] ringArray;
       
       ringArray = createRingArray();
        
       printRingArray(ringArray);
    }
    
    public static GoodRing[] createRingArray(){
        
       GoodRing[] ringArray = new GoodRing[10];
       for(int i=0;i<ringArray.length;i++){
           ringArray[i] = new GoodRing(Math.random()*100);
           
    }
    
        return ringArray;
}
    public static void printRingArray(GoodRing[] ringArray){
        System.out.println("Radius1\t\t"+"Radius2\t\t"+"Area");
        for (int i=0;i<ringArray.length;i++ ){
            System.out.print(ringArray[i].getRadius1()+"\t\t"+ringArray[i].getRadius2()+"\t\t"+
                    ringArray[i].findArea()+'\n');
        }
        System.out.println("---------------- ");
        System.out.println("The tatal areas of GoodRings is \t "+
                sum(ringArray));
    }
    
    public static double sum(GoodRing[] ringArray ){
        double sum = 0;
        
     for(int i=0;i < ringArray.length;i++)   
        sum += ringArray[i].findArea();
        
    return sum;    
    }

}


 class GoodRing {
    private double radius1,radius2;
    
    public GoodRing(){
        radius1 = 3.0;
        radius2 = 2.0;
    }
    
    public GoodRing (double newRadius1,double newRadius2) {
        radius1 = newRadius1;
        radius2 = newRadius2;
    }

    GoodRing(double d) {
        GoodRing[] ringArray = new GoodRing[10];
radius1 = 3.0;
        radius2 = 2.0;
    }

   public double getRadius1(){
        return radius1;
         }

    public double getRadius2(){
        return radius2;
    }
    
    public void setRadius(double newRadius1,double newRadius2){
        radius1 = (newRadius1 >= 0) ? newRadius1 : 0;
        radius2 = (newRadius2 >= 0) ? newRadius2 : 0;
    }
    
    public double findArea(){
        return (radius1*radius1-radius2*radius2)*Math.PI;
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册