int a = 1; int b = 2; System.out.println(a/b)为什么等于0
时间: 2023-12-17 14:06:04 浏览: 29
这是因为 a 和 b 的类型都是 int,所以在进行除法计算时,结果会被自动转换为整数型。在整数除法中,如果除数大于被除数,则结果为 0。因此,1/2 的结果是 0,而不是 0.5。如果你想得到一个小数结果,你可以将 a 或 b 转换成浮点数类型,例如:
```
int a = 1;
float b = 2.0f;
System.out.println(a/b); // 输出 0.5
```
相关问题
public static void main(String[] args) { int a = 1; int b = 2; System.out.println(a); // 1 System.out.println(b); // 2 change(a, b); System.out.println(a); // 1 System.out.println(b); // 2 } public static void change(int a, int b) { a = a + b; b = b + a; }
在这段代码中,`change()` 方法尝试修改传递给它的两个整数参数 `a` 和 `b` 的值。然而,由于Java中的参数传递是按值传递的,所以在 `change()` 方法中对参数的修改不会影响到 `main()` 方法中的变量。
具体解释如下:
1. 在 `main()` 方法中,声明并初始化两个整数变量 `a` 和 `b`,分别赋值为 1 和 2。
2. 使用 `System.out.println()` 打印变量 `a` 和 `b` 的值,分别输出 1 和 2。
3. 调用 `change(a, b)` 方法,并传递变量 `a` 和 `b` 的值作为参数。
4. 在 `change()` 方法中,接收到参数后,会创建两个新的局部变量 `a` 和 `b` 并初始化为参数的值。
5. 在 `change()` 方法中对局部变量 `a` 和 `b` 进行修改操作,但这些修改只在该方法的作用域内有效。
6. 回到 `main()` 方法后,使用 `System.out.println()` 再次打印变量 `a` 和 `b` 的值,依然输出 1 和 2。
因此,尽管在 `change()` 方法中对参数进行了修改,但因为参数传递是按值传递的,所以在 `main()` 方法中的变量并没有被修改。
public class VariableDemo { int a = 111; final int b = 222; public void display() { System.out.println("执行display()"); int a = 333; System.out.println(a); System.out.println(this.a); System.out.println(b); System.out.println(this.b); } public static void main(String[] args) { // TODO Auto-generated method stub int a = 444; System.out.println("执行main()"); System.out.println(a); //System.out.println(this.a); {// 代码块1 int c = 666; System.out.println(c); } System.out.println(c); {// 代码块2 int d = 666; System.out.println(d); } int d = 888; System.out.println(d); VariableDemo vd = new VariableDemo(); vd.display(); vd.b = 999; System.out.println(vd.b); } }
该代码存在以下问题:
1. 在`main`方法中,不能直接访问非静态变量`a`和`b`,因为它们是属于对象的,必须先创建一个类的实例才能访问。
2. `final`修饰的变量`b`不能被修改,所以在`vd.b = 999;`中会编译错误。
3. 在代码块1中定义的变量`c`只能在代码块内部访问,超出代码块范围后就不能再访问了。在`System.out.println(c);`处会编译错误。
4. 变量名`d`在代码块2和`main`方法中都出现了,这是不合法的,因为在同一级作用域中变量名不能重复。
修正后的代码如下:
```
public class VariableDemo {
int a = 111;
final int b = 222;
public void display() {
System.out.println("执行display()");
int a = 333;
System.out.println(a);
System.out.println(this.a);
System.out.println(b);
System.out.println(this.b);
}
public static void main(String[] args) {
int a = 444;
System.out.println("执行main()");
System.out.println(a);
{
int c = 666;
System.out.println(c);
}
// System.out.println(c); // 编译错误
{
int d = 666;
System.out.println(d);
}
int d = 888;
System.out.println(d);
VariableDemo vd = new VariableDemo();
vd.display();
// vd.b = 999; // 编译错误
System.out.println(vd.b);
}
}
```
修正后的代码中,将`vd.b = 999;`注释掉,因为`b`是用`final`修饰的,不能被修改。同时,变量名重复的问题也得到了修正。