一个简单的小例子,自己又改了下,有些地方还是感觉不明白!

小白爱代码 2015-12-19 07:23:32
加精
class Calculator{
private int num1;
private int num2;
private char option;

public void initCalculator(int a,int b,char o){
int num1 = a;//这步写错了,正确的写法是num1 = a;下一行是num2 =b;
int num2 = b;
if(o=='+'||o=='-'||o=='*'||o=='/'){
option = o;
}else{
option = '+';
}
}
public void add(){
switch(option){//这里的option就代表initCalculator函数里面的option吗?
case'+':
System.out.println("做加法运算,结果是:"+(num1+num2));
break;
case'-':
System.out.println("做加法运算,结果是:"+(num1-num2));
break;
case'*':
System.out.println("做加法运算,结果是:"+(num1*num2));
break;
case'/':
System.out.println("做加法运算,结果是:"+(num1/num2));
break;
}
}
}
class Demo2
{
public static void main(String[] args)
{ Calculator c = new Calculator();
c.initCalculator(1,5,'s');
c.add();
}
}

这是一个定义计算器的小例子!第七行和第八行我写错了,写成了int num1 = a;这样一来不管传什么数据进这个函数,结果都是0,为什么呢?这个int num1和成员变量里面的num1应该是同一个变量吧?而且都没有赋值,这样写应该等同于我重新声明了一个变量,int i =a;int j = b,应该等同与这个意思,那为什么一运行结果就是0呢?不明白!
还有第16行那个option,代表的是成员变量里面的option,还是initCalculator里面的option,或者这样说,这三个option都是同一个变量?

class Calculator{
private int num1;
private int num2;
private char option;

public void add(int a,int b,char o){
int num1 = a;//这里写不写前面的int结果都是一样的……
int num2 = b;
option = o;
switch(o){
case'+':
System.out.println("做加法运算,结果是:"+(num1+num2));
break;
case'-':
System.out.println("做加法运算,结果是:"+(num1-num2));
break;
case'*':
System.out.println("做加法运算,结果是:"+(num1*num2));
break;
case'/':
System.out.println("做加法运算,结果是:"+(num1/num2));
break;
default:
System.out.println("做加法运算,结果是:"+(num1+num2));
}
}

}
class Demo3
{
public static void main(String[] args)
{ Calculator c = new Calculator();
c.add(1,20,'*');
}
}

然后我自己觉得上面的写法太麻烦了,自己改了下,发现 7和8行,前面加不加int结果都一样,对输出的结果貌似没有影响……为什么这里加上int又不影响了!麻烦回答的大神,详细说说,小弟初学,感激不尽!
...全文
1991 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33508270 2015-12-25
  • 打赏
  • 举报
回复
是两个变量,正好同名 是同一个变量 看变量的作用域
eason_zhang_jq 2015-12-24
  • 打赏
  • 举报
回复
学习学习学习
画中如画 2015-12-24
  • 打赏
  • 举报
回复
学习了。。。。。
qq_24293071 2015-12-24
  • 打赏
  • 举报
回复
qq_29433545 2015-12-23
  • 打赏
  • 举报
回复
本人路过。。。。。。
孤岛人生 2015-12-23
  • 打赏
  • 举报
回复
不错不错,学习了
shpppppp 2015-12-23
  • 打赏
  • 举报
回复
学习了。。。
全哥爱你 2015-12-23
  • 打赏
  • 举报
回复
学习学习!弟弟顶顶顶顶顶顶顶顶顶顶
KobeAndLebron 2015-12-23
  • 打赏
  • 举报
回复
变量范围问题吧。
小白爱代码 2015-12-22
  • 打赏
  • 举报
回复
引用 6 楼 baiyouwei 的回复:
[quote=引用 1 楼 abcdefghiijklmnopqrs 的回复:]
class Calculator{
    private int num1;
    private int num2;
    private char option;
 
    public void initCalculator(int a,int b,char o){
         int num1 = a;//这步写错了,正确的写法是num1 = a;下一行是num2 =b;
         int num2 = b;
        if(o=='+'||o=='-'||o=='*'||o=='/'){
            option = o;
        }else{
            option = '+';
        }
    }
    public void add(){
        switch(option){//这里的option就代表initCalculator函数里面的option吗?-->是
            case'+':
                System.out.println("做加法运算,结果是:"+(num1+num2));
                break;
            case'-':
                System.out.println("做加法运算,结果是:"+(num1-num2));
                break;
            case'*':
                System.out.println("做加法运算,结果是:"+(num1*num2));
                break;
            case'/':
                System.out.println("做加法运算,结果是:"+(num1/num2));
                break;
        }   
    }
}
class  Demo2
{
    public static void main(String[] args) 
    {    Calculator c = new Calculator();
        c.initCalculator(1,5,'s');
        c.add();       
    }
}
这是一个定义计算器的小例子!第七行和第八行我写错了,写成了int num1 = a;这样一来不管传什么数据进这个函数,结果都是0(类中的成员变量num1的值还是0,因为在方法中重新定义了一个num1),为什么呢?这个int num1和成员变量里面的num1应该是同一个变量吧?(不是)而且都没有赋值,这样写应该等同于我重新声明了一个变量,int i =a;int j = b,应该等同与这个意思,那为什么一运行结果就是0呢?不明白!(从新定义了一个变量,和之前的方法中定义的num1的值和成员变量中定义的值没有关系) 还有第16行那个option,代表的是成员变量里面的option,还是initCalculator里面的option,或者这样说,这三个option都是同一个变量?(同一个) 然后我自己觉得上面的写法太麻烦了,自己改了下,发现 7和8行,前面加不加int结果都一样,对输出的结果貌似没有影响……为什么这里加上int又不影响了!麻烦回答的大神,详细说说,小弟初学,感激不尽!(因为这个方法中使用的都是int num1 = a的这个num,没有使用成员变量的num1)
谢谢你的回答,每次都很快,虽然答案比较简单,可能对你们来说都是简单的小问题吧!我自己写个小例子验证验证,一下子就全明白了!
class aaa
{ int num1;
  int num;
  public void ccc(int b){
	 
	  num = b;
	System.out.println(" b="+b);
  }

	 public void ddd(){
	 
	
	System.out.println(num);
  
  
  }
}


class Demo7
{
	public static void main(String[] args) 
	{	aaa c = new aaa();
		//c.ccc(2); 未标注的时候会输出两行2,标注了以后又会输出0!
		c.ddd();
		//System.out.println(c.num1);上下两行全标注的时候,这个时候又会输出0,成员变量num1的初始值。
	}
}
[/quote] num的取值是顺着下面的Demo7往下走的,c.ccc(2)等于2下面的c.ddd()里面的num也同样变成了2
  • 打赏
  • 举报
回复
引用 7 楼 baiyouwei 的回复:
[quote=引用 1 楼 abcdefghiijklmnopqrs 的回复:]
class Calculator{
    private int num1;
    private int num2;
    private char option;
 
    public void initCalculator(int a,int b,char o){
         int num1 = a;//这步写错了,正确的写法是num1 = a;下一行是num2 =b;
         int num2 = b;
        if(o=='+'||o=='-'||o=='*'||o=='/'){
            option = o;
        }else{
            option = '+';
        }
    }
    public void add(){
        switch(option){//这里的option就代表initCalculator函数里面的option吗?-->是
            case'+':
                System.out.println("做加法运算,结果是:"+(num1+num2));
                break;
            case'-':
                System.out.println("做加法运算,结果是:"+(num1-num2));
                break;
            case'*':
                System.out.println("做加法运算,结果是:"+(num1*num2));
                break;
            case'/':
                System.out.println("做加法运算,结果是:"+(num1/num2));
                break;
        }   
    }
}
class  Demo2
{
    public static void main(String[] args) 
    {    Calculator c = new Calculator();
        c.initCalculator(1,5,'s');
        c.add();       
    }
}
这是一个定义计算器的小例子!第七行和第八行我写错了,写成了int num1 = a;这样一来不管传什么数据进这个函数,结果都是0(类中的成员变量num1的值还是0,因为在方法中重新定义了一个num1),为什么呢?这个int num1和成员变量里面的num1应该是同一个变量吧?(不是)而且都没有赋值,这样写应该等同于我重新声明了一个变量,int i =a;int j = b,应该等同与这个意思,那为什么一运行结果就是0呢?不明白!(从新定义了一个变量,和之前的方法中定义的num1的值和成员变量中定义的值没有关系) 还有第16行那个option,代表的是成员变量里面的option,还是initCalculator里面的option,或者这样说,这三个option都是同一个变量?(同一个) 然后我自己觉得上面的写法太麻烦了,自己改了下,发现 7和8行,前面加不加int结果都一样,对输出的结果貌似没有影响……为什么这里加上int又不影响了!麻烦回答的大神,详细说说,小弟初学,感激不尽!(因为这个方法中使用的都是int num1 = a的这个num,没有使用成员变量的num1)
还有上次一个问题,+操作符不能连接String和void。你告诉我+操作符不能连接string具体什么意思呢?能简单写个小例子吗》[/quote]就是加号的左右不能连接String和void String+void不能这样连接,String+String这样可以
qq_33450900 2015-12-21
  • 打赏
  • 举报
回复
dingyige
小白爱代码 2015-12-21
  • 打赏
  • 举报
回复
引用 16 楼 ku2ran的回复:
补充一下: initCalculator这个方法里面 int num1=a; int num2 =b;这两个参数方法内的局部变量了。这两个局部变量仅在 initCalculator这个方法里面有效。 这种情况下 类成员变量 num1 num2的值是没有赋值的 add 这个方法使用的 num1 num2 是类的成员变量 这样写参与运算的值都不一样 肯定得不得你想要的结果 执行add方法后之所以没有报错 是jvm给int类型数据自动赋值为0了. initCalculator方法 改成 num1=a;num2=b;是给类的成员变量赋值。 再执行add方法 就得到你想要的结果了。
多谢完全明白了!两个num1 完全不是一回事!
alan19931103 2015-12-21
  • 打赏
  • 举报
回复
是两个变量,正好同名
是同一个变量

看变量的作用域
小白爱代码 2015-12-21
  • 打赏
  • 举报
回复
引用 1 楼 abcdefghiijklmnopqrs 的回复:
class Calculator{
    private int num1;
    private int num2;
    private char option;
 
    public void initCalculator(int a,int b,char o){
         int num1 = a;//这步写错了,正确的写法是num1 = a;下一行是num2 =b;
         int num2 = b;
        if(o=='+'||o=='-'||o=='*'||o=='/'){
            option = o;
        }else{
            option = '+';
        }
    }
    public void add(){
        switch(option){//这里的option就代表initCalculator函数里面的option吗?-->是
            case'+':
                System.out.println("做加法运算,结果是:"+(num1+num2));
                break;
            case'-':
                System.out.println("做加法运算,结果是:"+(num1-num2));
                break;
            case'*':
                System.out.println("做加法运算,结果是:"+(num1*num2));
                break;
            case'/':
                System.out.println("做加法运算,结果是:"+(num1/num2));
                break;
        }   
    }
}
class  Demo2
{
    public static void main(String[] args) 
    {    Calculator c = new Calculator();
        c.initCalculator(1,5,'s');
        c.add();       
    }
}
这是一个定义计算器的小例子!第七行和第八行我写错了,写成了int num1 = a;这样一来不管传什么数据进这个函数,结果都是0(类中的成员变量num1的值还是0,因为在方法中重新定义了一个num1),为什么呢?这个int num1和成员变量里面的num1应该是同一个变量吧?(不是)而且都没有赋值,这样写应该等同于我重新声明了一个变量,int i =a;int j = b,应该等同与这个意思,那为什么一运行结果就是0呢?不明白!(从新定义了一个变量,和之前的方法中定义的num1的值和成员变量中定义的值没有关系) 还有第16行那个option,代表的是成员变量里面的option,还是initCalculator里面的option,或者这样说,这三个option都是同一个变量?(同一个) 然后我自己觉得上面的写法太麻烦了,自己改了下,发现 7和8行,前面加不加int结果都一样,对输出的结果貌似没有影响……为什么这里加上int又不影响了!麻烦回答的大神,详细说说,小弟初学,感激不尽!(因为这个方法中使用的都是int num1 = a的这个num,没有使用成员变量的num1)
还有上次一个问题,+操作符不能连接String和void。你告诉我+操作符不能连接string具体什么意思呢?能简单写个小例子吗》
小白爱代码 2015-12-21
  • 打赏
  • 举报
回复
引用 1 楼 abcdefghiijklmnopqrs 的回复:
class Calculator{
    private int num1;
    private int num2;
    private char option;
 
    public void initCalculator(int a,int b,char o){
         int num1 = a;//这步写错了,正确的写法是num1 = a;下一行是num2 =b;
         int num2 = b;
        if(o=='+'||o=='-'||o=='*'||o=='/'){
            option = o;
        }else{
            option = '+';
        }
    }
    public void add(){
        switch(option){//这里的option就代表initCalculator函数里面的option吗?-->是
            case'+':
                System.out.println("做加法运算,结果是:"+(num1+num2));
                break;
            case'-':
                System.out.println("做加法运算,结果是:"+(num1-num2));
                break;
            case'*':
                System.out.println("做加法运算,结果是:"+(num1*num2));
                break;
            case'/':
                System.out.println("做加法运算,结果是:"+(num1/num2));
                break;
        }   
    }
}
class  Demo2
{
    public static void main(String[] args) 
    {    Calculator c = new Calculator();
        c.initCalculator(1,5,'s');
        c.add();       
    }
}
这是一个定义计算器的小例子!第七行和第八行我写错了,写成了int num1 = a;这样一来不管传什么数据进这个函数,结果都是0(类中的成员变量num1的值还是0,因为在方法中重新定义了一个num1),为什么呢?这个int num1和成员变量里面的num1应该是同一个变量吧?(不是)而且都没有赋值,这样写应该等同于我重新声明了一个变量,int i =a;int j = b,应该等同与这个意思,那为什么一运行结果就是0呢?不明白!(从新定义了一个变量,和之前的方法中定义的num1的值和成员变量中定义的值没有关系) 还有第16行那个option,代表的是成员变量里面的option,还是initCalculator里面的option,或者这样说,这三个option都是同一个变量?(同一个) 然后我自己觉得上面的写法太麻烦了,自己改了下,发现 7和8行,前面加不加int结果都一样,对输出的结果貌似没有影响……为什么这里加上int又不影响了!麻烦回答的大神,详细说说,小弟初学,感激不尽!(因为这个方法中使用的都是int num1 = a的这个num,没有使用成员变量的num1)
谢谢你的回答,每次都很快,虽然答案比较简单,可能对你们来说都是简单的小问题吧!我自己写个小例子验证验证,一下子就全明白了!
class aaa
{ int num1;
  int num;
  public void ccc(int b){
	 
	  num = b;
	System.out.println(" b="+b);
  }

	 public void ddd(){
	 
	
	System.out.println(num);
  
  
  }
}


class Demo7
{
	public static void main(String[] args) 
	{	aaa c = new aaa();
		//c.ccc(2); 未标注的时候会输出两行2,标注了以后又会输出0!
		c.ddd();
		//System.out.println(c.num1);上下两行全标注的时候,这个时候又会输出0,成员变量num1的初始值。
	}
}
ShaYQ 2015-12-21
  • 打赏
  • 举报
回复
虽然不懂JAVA,但是C++里面,你变量重名才使得你困惑,若把成员函数里的定义换个名字,你应该就明白了,函数内部定义的变量在函数return时就over了
kutuzov2016 2015-12-21
  • 打赏
  • 举报
回复
补充一下: initCalculator这个方法里面 int num1=a; int num2 =b;这两个参数方法内的局部变量了。这两个局部变量仅在 initCalculator这个方法里面有效。 这种情况下 类成员变量 num1 num2的值是没有赋值的 add 这个方法使用的 num1 num2 是类的成员变量 这样写参与运算的值都不一样 肯定得不得你想要的结果 执行add方法后之所以没有报错 是jvm给int类型数据自动赋值为0了. initCalculator方法 改成 num1=a;num2=b;是给类的成员变量赋值。 再执行add方法 就得到你想要的结果了。
kutuzov2016 2015-12-21
  • 打赏
  • 举报
回复
initCalculator这个方法里面 int num1=a; int num2 =b;这两个参数方法内的局部变量了。 add 这个方法使用的 num1 num2 是类的成员变量 这样写参与运算的值都不一样 肯定得不得你想要的结果 initCalculator方法 改成 num1=a;num2=b;是给类的成员变量赋值。 再执行add方法 就得到你想要的结果了。
业余草 2015-12-21
  • 打赏
  • 举报
回复
加载更多回复(6)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧