为了账号安全,请及时绑定邮箱和手机立即绑定

请教各位大神,最后输出为何是零?

https://img1.sycdn.imooc.com//5be2911a000120e736361024.jpg

https://img1.sycdn.imooc.com//5be2911f0001bb1418520764.jpg

https://img1.sycdn.imooc.com//5be2912300016f1918440800.jpg

https://img1.sycdn.imooc.com//5be2912700019f5718780788.jpg

https://img1.sycdn.imooc.com//5be2912b000134b711240408.jpg

如图。请教一下各位,为何最后输入信息之后,输出的值始终为零呢?

正在回答

4 回答

public abstract class Shape {
    public double C;
    public double S;
    public abstract void Perimeter();
    public abstract void Area();
}
public class Circle extends Shape{
    double R;
    final double PI = 3.14;
    Circle(double RR){
        this.R = RR;
    }
    public void Perimeter(){
        C = 2 * PI * R;
        System.out.println("圆形的周长为" + C);
    }
    public void Area(){
        S = PI * R * R;
        System.out.println("圆形的面积为" + S);
    }
}
public class Rectangle extends Shape{
    double l;
    double d;
    Rectangle(double ll, double dd){
        this.l = ll;
        this.d = dd;
    }
    public void Perimeter(){
        C = 2 * (l + d);
        System.out.println("矩形的周长为" + C);
    }
    public void Area(){
        S = l * d;
        System.out.println("矩形的面积为" + S);
    }
}
import java.util.Scanner;

public class Test {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入矩形的长和宽");
        double l = input.nextDouble();
        double d = input.nextDouble();
        Shape sp1 = new Rectangle(l, d);
        sp1.Perimeter();
        sp1.Area();
        System.out.println("请输入圆形的半径");
        double r = input.nextDouble();
        Shape sp2 = new Circle(r);
        sp2.Perimeter();
        sp2.Area();
    }
}

请输入矩形的长和宽

2

2

矩形的周长为8.0

矩形的面积为4.0

请输入圆形的半径

2

圆形的周长为12.56

圆形的面积为12.56


0 回复 有任何疑惑可以回复我~
#1

抒情却输情 提问者

请问一下,是因为我没有写带参的构造方法,所以输出才为零吗?为什么普通成员方法没有给变量赋上值呢?
2018-11-07 回复 有任何疑惑可以回复我~
#2

qq_慕姐9261892

Scanner input = new Scanner(System.in); System.out.println("请输入矩形的长和宽"); double l = input.nextDouble(); double d = input.nextDouble(); Shape sp1 = new Rectangle(l, d); sp1.Perimeter(); sp1.Area();老哥你这短代码什么意思
2019-03-26 回复 有任何疑惑可以回复我~
#3

俗人_心 回复 qq_慕姐9261892

接收用户输入的变量
2019-12-30 回复 有任何疑惑可以回复我~

你那个intial类里面的r是本类中的变量,因为没有作为参数传给方法,所以不参与方法的计算的。子类中的长和宽半径都没赋值,系统赋值0。

0 回复 有任何疑惑可以回复我~

就是因为你原来的代码里面没有地方没有给赋值

0 回复 有任何疑惑可以回复我~

应该是里面的变量没有给赋新值,用的就是默认的值0,这样无论输入什么数值,输出都是0

0 回复 有任何疑惑可以回复我~
#1

抒情却输情 提问者

我就是纳闷儿为什么没有给变量赋上值。。。
2018-11-08 回复 有任何疑惑可以回复我~
#2

雀雀you 回复 抒情却输情 提问者

因为你没有将控制台得到的值传递给负责计算的方法
2018-11-19 回复 有任何疑惑可以回复我~
#3

雀雀you 回复 雀雀you

楼上大佬按照你的思路已经给你解决了问题,但是我觉得完全没必要写得这么麻烦。你直接写一个带参的方法不就行了吗,既不需要使用到成员变量也不需要使用构造方法。
2018-11-19 回复 有任何疑惑可以回复我~
#4

抒情却输情 提问者 回复 雀雀you

懂了!谢谢
2018-11-21 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消

请教各位大神,最后输出为何是零?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信