Java 习题3 参考答案及解析

1.问答题

  1. 关系运算符的运算结果是怎样的数据类型?
  2. if语句中的条件表达式的值是否可以是int型?
  3. while语句中的条件表达式的值是什么类型?
  4. switch语句中必须由dafault选项吗?
  5. 在while语句的循环体中,执行break语句的效果是什么?
  6. 可以用for语句代替while语句的作用吗?

问答题解析

1.boolean类型(true或者false)
2.不可以,只能是boolean类型
3.boolean类型
4.不是必须的,但为了增强代码的鲁棒性,建议添加default选项
5.结束while语句的执行
6.可以


增强型for循环介绍

增强型for循环,又叫foreach循环,最多的应用在于循环遍历数组元素

Java
int [] arr = {1,2,3,4,5};
for(int n:arr)   //定义了一个局部变量n按顺序获取数组arr中每一个元素
  System.out.println(n);

2.选择题

1.下列哪个叙述是正确的?
A. 5.0/2+10的结果是double型数据
B. (int)5.8+1.0的结果是int型数据
C. ‘苹’+’果’的结果是char型数据
D.(short)10+’a’的结果是short型数据


2.用下列哪个代码替换程序标注的【代码】会导致编译错误?
A. m–>0
B. m++>0
c. m=0
D. m>100&&true

Java
public class E {
    public static void main(String args[]) {
        int m=10,n=0;
        while([代码]){
            n++;
        }
    }
}

Type mismatch: cannot convert from int to boolean


3.假设有“int x=1;”,以下哪个代码导致“可能损失精度,找到int需要char”这样的编译错误?
A. short t = 12+’a’;
B. char c = ‘a’+1;
C. char m = ‘a’+x;
D. byte n = ‘a’+1;


选择题解析

选择题答案:1.A 2.C 3.C


第一题B将5.8转化为整型后又加了一个double型1.0,所以结果仍为double型
C字符和int可以相互转换,两个字符相加就是对应的unicode相加,但是相加后unicode的值大于了char的范围(0-65535),所以不能用char字符接收,需要用int数据接收
D char的精度要比short高,所以一个short加上一个char结果为char


第二题
while循环条件应该是boolean类型,而C是赋值语句,所以会编译错误,要注意=是赋值,==才是等于


第三题
精度从“低”到“高”的排列的顺序是:
byte->short->char->int->long->float->double
Java在计算算术表达式的值时,使用下列运算精度规则:
(1)如果表达式中有double,则按double进行运算。
(2)如果表达式中最高精度是float,则按float进行运算
(3)如果表达式中最高精度是long,则按long进行运算
(4)如果表达式中最高精度低于int,则按int进行计算
Java允许把不超出byte、short、char的取值范围的算术表达式的值赋给byte、short、char。
a的ASCII码值是97,所以A选项97+12可以赋值给short
这道题关键在于B和C的区别,有人会说x不是等于1吗,那么’a’+x不就是’a’+1吗,为什么c是错的?
原因在于char c=’a’+1中’a’是字符型常量,1是数字常量。在编译器编译的时候,会自动合并,不会做类型转换。在编译阶段就完成。
char m=’a’+x中’a’是字符型常量,但x是变量,在编译阶段无法合并,只能在运行时编译,运行时发现x是整型,’a’+x自动转换成整型,无法直接赋值给char型。需要进行强转。(char)(‘a’+x)


阅读程序题

(1)下列程序的输出结果是什么?

Java
public class E {
    public static void main(String args[]) {
        char x='你',y='e',z='吃';
        if(x>'A'){
            y='苹';
            z='果';
        }
        else
            y='酸';
        z='甜';
        System.out.println(x+","+y+","+z);
    }
}

(2)下列程序的输出结果是什么?

Java
public class E {
    public static void main(String args[]) {
        char c = '\0';
        for (int i = 1; i <= 4; i++) {
            switch (i) {
            case 1:
                c = 'J';
                System.out.print(c);
            case 2:
                c = 'e';
                System.out.print(c);
                break;
            case 3:
                c = 'p';
                System.out.print(c);
            default:
                System.out.print("好");
            }
        }
    }
}

(3)下列程序的输出结果是什么?

Java
public class E {
    public static void main(String args[]) {
        int x=1,y=6;
        while(y-->0){
            x--;
        }
        System.out.println("x="+x+",y="+y);
    }
}

阅读程序解析

第一题答案为:你,苹,甜
‘你’的字符编号大于’A’所以执行if中语句,而注意到else没有加大括号,所以z=’甜’;必定会执行。


第二题答案为:Jeep好好
如果switch中的一个case后面没有加break,那么程序会一直执行,直到遇到break或者swich结束。所以第一次循环输出J和e,第二次输出e,第三次输出p和好,第四次输出好。


第三题答案为:x=-5,y=-1
这道题重点是while判断条件是y–>0,自减在后,所以先判断y的大小是否大于0,再自减。即使循环不满足条件,但是只要进行了判断操作就一定会自减。 可以算出y从6减少到1都是满足循环条件的,所以循环执行了6次,x减了6次,结果是-5,此时y的值为0;再次判断循环条件,发现不满足条件,退出循环,而y还要自减,结果为-1。

  • 89
    点赞
  • 201
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
大学java的期末复习资源,试题及答案 1、编译Java Application源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( )。 A.java B..class C.html D..exe 2、下面哪一项字符序列可以作为合法的标识符( )。 A.true B.null C.2018_year D.$2018year 3、下列选项中,( )不属于Java语言的简单数据。 A.整数 B.数组 C.字符 D.浮点 4、对于int a[ ]=new int[3],下列叙述错误的是( )。 A. a.length的值是3 B. a[1]的值是1 C. a[0]的值是0 D. a[a.length-1]的值等于a[2]的值 5、用下列哪个代码替换程序标注的【代码】会导致编译错误? A.m-->0 B.m++>0 C.m = 0 D.m>100&&true; public class E { public static void main (String args[ ]) { int m=10,n=0; while(【代码】) { n++; } } } 6、以下关于继承的叙述正确的是( )。 A. 在Java中类不能多继承 B. 在Java中一个类只能实现一个接口 C. 在Java中一个类不能同时继承一个类和实现一个接口 D. 在Java中接口只能单一继承 7、对于下列Cat类,哪个叙述是错误的?( ) A.Cat类只有 2 个构造方法,而且没有无参数的构造方法 B.Cat类有 4 个构造方法 C.Cat (int m)和 Cat (double m)是互为重载的构造方法 D.int Cat (int m)和 void Cat (double m) 是互为重载的非构造方法 class Cat { Cat (int m){ } Cat (double m){ } int Cat (int m){ return 23; } void Cat (double m){ }} 8、下列叙述哪些是正确的( )。 A final 类可以有子类 B abstract类中只能有abstract方法 C abstract类中可以有非abstract方法,但该方法不可以用final修饰 D 不可以同时用final和abstract修饰一个方法 9、假设D类有如下定义,设d是D类的一个实例对象,下列语句调用错误的是 ( )。 class D{ int i; static String s; void method1(){} static void method2(){}} A.d.method1(); B.D.method2(); C.D.method1(); D.System.out.println(d.i); 10、将下列( )哪个代码替换下列程序中的【代码】不会导致编译错误。 A.public int f(){return 100+M;} B.int f(){return 100;} C.public double f(){return 2.6;}。 D.public abstract int f();
<<引用:设计模式是描述了软件开发中常见问题的解决方案的一种模板化设计原则。设计模式主要用于解决软件设计中的重复性问题,帮助开发人员更高效地编写可维护、可扩展的代码。设计模式有很多种,如工厂模式、单例模式、观察者模式等等。>> 对于你的问题,关于Java设计模式第3章的课后习题参考答案,很抱歉,我无法提供特定章节的课后习题参考答案,因为我没有访问特定书籍的权限。但是,我可以为你提供一些常见的Java设计模式及其原则的信息,希望能帮到你。 常见的Java设计模式包括但不限于: 1. 创建模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原模式。 2. 结构模式:适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式。 3. 行为模式:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 这些设计模式都有各自的原则和含义,如创建模式用于对象的创建和实例化,结构模式用于类和对象的组合,行为模式用于对象之间的通信和交互等等。每种设计模式都有其适用的场景和优缺点,具体使用哪种设计模式需要根据实际需求来确定。 希望以上信息对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值