属性之间互相关联,为什么输出结果不对

package 第6周;
import javax.swing.*;
import java.util.*;
public class 圆 {
    double r,R,S;
    private void  setr(double newr) {
        if(r>0) {
            newr=R/2;
            r=newr;
        }
        else 
            r=0;
    }
    private double getr() {
        return r;
    }
    private void setR(double newR) {
        if(R>0) 
        {
        newR=r*2;
        R=newR;
        }
        else
            R=0;
    }
    private double getR() {
        return R;
    }
    private double getS() {
        return 3.14*r*r;
    }
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        圆 acircle=new 圆();
        acircle.setr(10);
        acircle.setR(30);
        System.out.print("圆的半径为:"+acircle.getr()+"\n"+"圆的直径为:"+acircle.getR());
    }

}
 

这样改改

public class 圆 {
    double r,R,S;
    private void  setr(double newr) {
        if(r>0) {
            r=newr;
            R = 2*r;
        }
        else 
            r=0;
    }
    private double getr() {
        return r;
    }
    private double getR() {
        return R;
    }
    private double getS() {
        return 3.14*R*R;
    }
    public static void main(String[] args) {
        圆 acircle=new 圆();
        acircle.setr(10);
        System.out.print("圆的半径为:"+acircle.getr()+"\n"+"圆的直径为:"+acircle.getR() + "\n面积:" + acircle.getS());
    }

}

所有的 set 方法错了,应该改成你传入的是,newR,但是你判断的是 if r > 0

JAVA语言入门到精通(QQ项目实训):https://edu.csdn.net/course/detail/2981

你的R在哪赋值的?没值啊;setr 方法 r = 0.0直接返回了。setR 方法 R = 0.0 返回了;0 / 任何数 = 0;

private void  setr(double newr) {
        if(r>0) {  // 这里 直接过不去,double r 默认 0.0 判断失败else r = 0
            newr=R/2; // 其次 就算上面的能过去,这里 double R 默认值 0.0  0 / 2 = 0;
            r=newr;
        }
        else
            r=0;
    }

就拿其中一个方法举例子

   private void  setr(double newr) {
        if(newr>0) {
            newr=newr/2;
            r=newr;
        }
        else
            r=0;
    }

    private void setR(double newR) {
        if(newR>0)
        {
            newR=newR*2;
            R=newR;
        }
        else
            R=0;
    }

把你的这两个方法改成这样

private void  setr(double newr) {
        if (R > 0){
            if (r * 2 != R){
                System.out.println("半径错误");
            }
        }else{
            r = newr;
            R = r * 2;
        }
    }

    private void setR(double newR) {
        if (r > 0){
            if (newR / 2 != r){
                System.out.println("直径错误");
            }
        }else{
            R = newR;
            r = R / 2;
        }
    }

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632