03_操作符_练习

1 代码观察

观察以下代码

int a = 6 -- ; //编译错误 Variable expected
System.out.println(a);

问题:上⾯代码是否有错误,如果没有,程序结果是多少?


2 代码分析

分析以下代码的运⾏结果【重点复习原码 反码 补码】

System.out.println(5&9);		//1 √
System.out.println(5|9);		//13 √
System.out.println(5^9);		//12 √
System.out.println(~-5);		//? 取反是否会对符号位操作?会,所有位取反 ans:4
System.out.println(5<<2);		//20 √
System.out.println(-5<<2);		//? ans:-20
System.out.println(-5>>2);		//? ans:-2
System.out.println(-5>>>2);		//? ans: 001(29)0 == 1073741822
System.out.println(5>>2);		//2 × ans:1
System.out.println(5>>34);		//0 × ?ans:1
System.out.println(97=='a');	//true √
System.out.println(5.0==5);		//? ans:true
System.out.println(4>5 ^ 'c'>'a');//false ^ true = true √
System.out.println((int)(char)(byte)-1);//-1? x ans:65535

X

答案:
1
13
12
4
20
-20
-2
1073741822
1
1
true
true
true
65535

在这里插入图片描述
在这里插入图片描述
注意:负数右移>> ,符号位不变, 高位补1。

System.out.println(5>>32);		//5
System.out.println(5>>33);		//2
System.out.println(5>>34);		//1

3 指定位置设置为1

问题描述:
将参数v的第n位置设为1,然后返回该结果值。
代码结构:

public class Test3_SetOne {
	// ⽅法声明如下:
	public static int setBit(int v,int n){
		// 提示:使⽤ | 及 <<
		// 补全代码
	    intt = 1 << (n - 1);
	    v = v | t;
	    return v;
	}
	public static void main(String[] args) {
		int r = setBit(10,3);
		System.out.println("r: " + r);
	}
}

4 指定位置设置为0

问题描述:
将参数v的第n位置为0,然后返回该结果值。
代码结构:

public class Test4_SetZero {
	// ⽅法声明如下:
	public static int setZero(int v,int n){
		// 提示:使⽤ ~ 及 <<
		// 补全代码
		int t = 1;
        t = t << (n-1);
        v = (v | t) ^ t;
//        v = v ^ t;
        return v;
	}
	public static void main(String[] args) {
		int r = setZero(10,2);
		System.out.println("r: " + r);
 	}
}

5 代码分析

分析下⾯⼏段代码,写出输出结果,最后运⾏程序进⾏验证
(1)

int b=5;
if(b>4)
	System.out.println(b);
else
	b--;
	System.out.println(b);

5
运行结果5\n5

(2)

int b=5;
if(b>4)b--; System.out.println("b⼤于4");
else {
	System.out.println("b不⼤于4");
}

b=4 输出"b大于4×
else编译错误"

(3)

int age=45;
if(age>20) {
	System.out.println("年轻⼈");
}else if(age>40){
	System.out.println("中年⼈");
}else if(age>60){
	System.out.println("⽼年⼈");
}

中年人 错×
运行结果: 年轻人 (粗心)

(4)

int a=80;
switch(a) {
case 90:{
 System.out.println("优秀");
 }
case 80:{
 System.out.println("⼀般");
 }
case 60:{
 System.out.println("及格");
 break;
 }
case 50:{
 System.out.println("基础弱");
 }
}

一般\n及格

(5)

int count=0;
while(count>0);
{
System.out.println(count);
}

无输出

(6) 错x

for (int i = 0; i < 5; i++) {
System.out.print(i);
i*=0.1;
}
System.out.println("循环结束");

编译错误? 错误

运行结果: i *= 0.1 // 隐含强制类型转换, i = 0, 程序死循环

(7)

for(int i=0;i<3;i++) {
	System.out.println(i);
	if(i==1) {
		continue;
	}
	System.out.println("continue后的输出语句");
}
0
continue后的输出语句
1
2
continue后的输出语句

(8)

for (int i = 0; i < 3; i++) {
	System.out.println(i);
	if (i == 1) {
		return;
	}
	System.out.println("return后的输出语句");
}
0
return后的输出语句
1

6 九九乘法表

在这里插入图片描述

public class Test6_MultiplicationTable {
    public static void main(String[] args) {

        for(int i = 1; i <= 9; i ++ ) {
            for(int j = 1; j <= i; j ++ ) {
                System.out.printf("%d*%d=%d ", j, i, j * i);
            }
            System.out.println();
        }

    }
}


7 素数问题

问题描述:
请编写⼀个Java程序,判断101-200之间有多少个素数,
并输出所有素数

补充

求质数(素数)算法,及算法优化

赵sir的学习笔记: 埃氏筛、线性筛

public class Test7_PrimeNumber {
    public static void main(String[] args) {

        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        int count = 0;
        for(int i = 101; i <= 200; i ++ ) {
            boolean p = true;
            for(int j = 2; j < i; j ++ ) {
                if(i % j == 0) {
                    p = false;
                    break;
                }
            }
            if(p) {
                arrayList.add(i);
                count ++;
            }
        }

        System.out.println(count);
        for(int x : arrayList) System.out.print(x + " ");
    }
}


8 月份计算

请编写⼀个Java程序,实现从键盘录⼊⽉份,判断该⽉
份属于哪个季节
【要求】

  • 如果⽉份不再1-12之间,则报错:输⼊⽉份有误
  • 匹配⽉份,输出对应的季节 12-2冬 3-5春 6-8夏 9-11秋
  • 使⽤ java.util.Scanner 类完成
public class Test8_Season {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输⼊⼀个⽉份:");
        int n = sc.nextInt();
        if(n < 1 || n > 12) {
            System.out.println("输⼊⽉份有误");
            return;
        }
        if(n >= 3 && n <= 5) {
            System.out.println("春");
        } else if(n >= 6 && n <= 8) {
            System.out.println("夏");
        } else if(n >= 9 && n <= 11) {
            System.out.println("秋");
        } else {
            System.out.println("冬");
        }

    }
}


9 天数计算

问题描述:
请编写⼀个Java程序,实现从键盘中输⼊年份 ⽉份 日期,输出这⼀天是该年的第⼏天
【要求】

  • 输⼊的年份、⽉份、⽇期均为数字,不⾜10的⽤0x表示,如:1⽉1⽇为01 01
  • 输⼊的年份、⽉份、⽇期之间⽤空格隔开,如:2023 04 27
    【示例】
    输⼊:2023 04 27
    输出:117
public class Test9_DayOfYear {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int y = sc.nextInt();
        int m = sc.nextInt();
        int d = sc.nextInt();
//        System.out.println("" + y + m + d);

        int[] md = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int[] leepyearmd = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        int ans = 0;
        if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {    // 闰年
            for(int i = 0; i < m - 1; i ++)
                ans += leepyearmd[i];
            ans += d;
        } else {
            for(int i = 0; i < m - 1; i ++)
                ans += md[i];
            ans += d;
        }
        System.out.println(ans);

        // LocalDate
//        LocalDate of = LocalDate.of(y, m, d);
//        int ans = of.getDayOfYear();
//        System.out.println(ans);
    }
}

10 完全数问题

问题描述:
请编写⼀个Java程序,实现输⼊⼀个数,判断其是否为完全数
若⼀个⾃然数,恰好与除去它本身以外的⼀切因数的和相等,这种数叫做完全数。
如:
6是完全数,因为,6 = 1 + 2 + 3;
28是完全数,因为,28 = 1 + 2 + 4 + 7 + 14;
【示例1】
输⼊:6
输出:6是完全数
【示例2】
输⼊:11
输出:11不是完全数

public class Test10_PerfectNumber {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int sum = 0;
        for(int i = 1; i < n; i ++ ) {
            if(n % i == 0) sum += i;
        }
        if(sum == n)
            System.out.println(n + "是完全数");
        else
            System.out.println(n + "不是完全数");
    }
}

11图形输出

问题描述:
请编写⼀个Java程序,实现下⾯图形的输出
【提示】
先输出上半部分【先输出空格 再输出*】
再输出下半部分

   *
  ***
 *****
*******
 *****
  ***
   *
public class Test11_PrintDiamond {
    public static void main(String[] args) {
        for(int i = 0; i < 4; i ++ ) {
            for(int j = 2; j >= i; j -- ) {
                System.out.print(" ");
            }
            for(int j = 0; j < 1 + i * 2; j ++ )
                System.out.print("*");
            System.out.println();
        }
        for(int i = 2; i >= 0; i -- ) {
            for(int j = 2; j >= i; j -- ) {
                System.out.print(" ");
            }
            for(int j = 0; j < 1 + i * 2; j ++ )
                System.out.print("*");
            System.out.println();
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值