public class Test4_3 { public static void main(String[] args){ int a=10; int b=3; double c=++b; b++ int d=a/b; System.out.println(c); System.out.println(d); System.out.println((float)(a/b)); System.out.println((float)a/b); } }结果是
时间: 2024-03-24 10:36:09 浏览: 58
代码中有语法错误,`b++`语句缺少分号。在修复语法错误后,运行代码可以得到以下结果:
```
4.0
3
3.0
3.3333333
```
解释一下每个输出结果:
- `c`的值是`4.0`,因为`++b`会先将`b`的值加1,然后将加1后的值赋值给`c`。
- `d`的值是`3`,因为`a/b`运算会将结果截断为整数类型,所以`d`的值是`10/3`的整数部分,即`3`。
- `(float)(a/b)`的值是`3.0`,因为`(float)`会先将`a/b`的整数结果强制转换为`float`类型,然后再输出。
- `(float)a/b`的值是`3.3333333`,因为`a`先被转换为`float`类型,然后再与`b`相除并输出。
相关问题
有以下源程序,分别在不同的包中,请写出程序运行结果: package dir1; public class A{ public int i=1; private int j=2; protected static int k=6; public A(int i, int j){ i=i; this.j=j; } public float f(int x,int y) { return x+y+j; } protected double g(int i){ return this.i+i; } public int h(int n) { k+=n; return k; } } package dir2; import dir1.A; class B extends A{ int i=3; public B(){ super(3,4); } public double g(int m){ return super.g(m)+i; } public float f(int x,int y) { return x+y; } } public class Test{ public static void main(String[] args) { A a = new A(5,6); B b1=new B(); System.out.println(b1.g(2)); System.out.println(b1.h(3)); a=b1; System.out.println(a.f(1, 2)); B b2=new B(); System.out.println(b2.h(3)); } }
程序运行结果为:
10.0
3
2.0
3
注释:
- 第1次输出为 b1.g(2),b1 是 B 的实例化对象,调用 g 方法,输出的是 2 * 1 + 3 = 5.0。
- 第2次输出为 b1.h(3),b1 是 B 的实例化对象,使用了 A 中的 h 方法,将 j 的值赋为 3,然后返回 k 的值,即 3。
- 第3次输出为 a.f(1, 2),a 是 A 类型的变量,但是其实际指向的是 B 的实例化对象 b1,调用 f 方法,输出的是 1 * 2 = 2.0。
- 第4次输出为 b2.h(3),b2 是 B 的实例化对象,使用了 A 中的 h 方法,将 k 的值赋为 3,然后返回 k 的值,即 3。
下列程序定义了一个TestEx1公共类,并在其中定义了多个重载方法test1()和test2(),请编译调试发现其错误,并指出错误原因并修改运行 public class TestEx1 { private int a,b,c; public TestEx1(int a,int b){ this.a=a; this.b=b; } public void test1(){ } public void test1(int t){ } public void test1(float t){ } public void test1(float t1,int t2){ } public int test1(double d){ return this.a; } public void test1(){ return this.a; } public static void test2(){ } public static void main(String[] args) { TestEx1 tEx1 = new TestEx1(); TestEx1 tEx2 = new TestEx1(10,100); tEx1.test1(); TestEx1.test1(10.0f); TestEx1.test2(); } }
以下是修改后的代码:
```java
public class TestEx1 {
private int a, b, c;
public TestEx1(int a, int b) {
this.a = a;
this.b = b;
}
public void test1() {
}
public void test1(int t) {
}
public void test1(float t) {
}
public void test1(float t1, int t2) {
}
public int test1(double d) {
return this.a;
}
// 修改方法名为test3,并且去掉返回值类型void前的int
public void test3() {
System.out.println(this.a);
}
public static void test2() {
}
public static void main(String[] args) {
TestEx1 tEx1 = new TestEx1(5, 15); // 修改为传入两个参数
TestEx1 tEx2 = new TestEx1(10, 100);
tEx1.test3(); // 修改为调用test3方法
TestEx1.test1(10.0f); // 修改为调用正确的方法
TestEx1.test2();
}
}
```
错误原因:
1. 缺少构造函数的无参版本,导致在main方法中创建TestEx1对象时出错。
2. 方法test1()重载了两次,但是参数列表完全相同,无法区分调用哪个方法。
3. 方法test1()的返回值类型为void,无法使用return语句返回值。
修改方式:
1. 添加构造函数TestEx1(int a, int b)。
2. 修改方法test1()的参数列表,使其可以区分调用不同的重载方法。
3. 修改方法test1()的返回值类型为int,或者添加新的方法test3(),用于输出a的值。
4. 修改main方法中创建TestEx1对象的方式,传入正确的参数。
5. 修改调用test1()方法的参数,使其调用正确的方法。
阅读全文
相关推荐

















