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

调用方法输出问题

public class Phone {

//属性

float screen;

float cpu;

float mem;

public Phone(){

System.out.println("无参构造器执行!");

}

public Phone(float newScreen,float newCpu,float newMem){

if (newScreen<3.5f) {

System.out.println("输入有误,自动赋值3.5");

screen = 3.5f;

} else {

screen = newScreen;

}

screen = newScreen;

cpu = newCpu;

mem = newMem;

System.out.println("尺寸:"+screen+"cpu:"+cpu+"mem"+mem+"有参构造器执行了");

}

}

尺寸:1.0cpu:2.0mem2.0有参构造器执行了


输出结果为什么不对了 ??帮忙给解释一下

正在回答

2 回答

你的代码是没有问题的,但是你给的这个代码是没有main函数的。在main函数中调用构造方法时,要依据调用方法的参数而定.

譬如你的第一个无参数方法就是new Phone();

第二个就要给它参数 new Phone(1.0f,2.0f,3.0f)。

然后你在代码中有一个判断:

if (newScreen<3.5f) {

System.out.println("输入有误,自动赋值3.5");

screen = 3.5f;

} else {

screen = newScreen;

}

如果你输入1.0f,2.0f,3.0f,它执行判断之后会把screen从你赋值的1.0f 重新赋值为3.5f,然后else那一句会跳过不执行,这个是没毛病的。

但是你在后面有一句

screen = newScreen,这个是把你输入的1.0f再次赋给screen,所以你输出之后还会是1.0f, 2.0f, 3.0f。

下面的是我改的代码:

public class Phone {
 //属性
 float screen;
 float cpu;
 float mem;
 public Phone(){
 System.out.println("无参构造器执行!");
 }
 public Phone(float newScreen,float newCpu,float newMem){
 if (newScreen<3.5f) {
 System.out.println("输入有误,自动赋值3.5");
 screen = 3.5f;
 } else {
 screen = newScreen;
 }
 //screen = newScreen;//把这一行去掉,试一下效果
 cpu = newCpu;
 mem = newMem;
 System.out.println("尺寸:"+screen+"cpu:"+cpu+"mem"+mem+"有参构造器执行了");
 }
 public static void main(String[] args) {
  new Phone();
  new Phone(1.0f,6.0f,8.1f);//直接传参数,也可以是变量赋值传参数
 }
 }

希望对你有帮助!^-^

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

screen = newScreen;这句话多输入了一次

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

承诺太虚伪 提问者

我知道 所输了一次 ,可是else 里面已经给screen重新赋值了,下来再运行一遍 怎么会不对呢?
2017-05-06 回复 有任何疑惑可以回复我~
#2

qq_喷泉_0 回复 承诺太虚伪 提问者

在if...else...语句中已经重新对screen赋值了,若在if...else...语句外重新使用screen = newScreen;表示又一次将传入的值赋给screen,覆盖了前面的判断,也就是判断无效了,最后输出依然是传入的值
2017-05-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530629    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

调用方法输出问题

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