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之间有多少个素数,
并输出所有素数
补充
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();
}
}
}
Java编程练习:代码调试、运算符理解与基础逻辑问题,
1405

被折叠的 条评论
为什么被折叠?



