JAVA语言基础案例总结
1.类型提升问题
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;
//编译错误
byte b4 = 3 + 4;
//编译正确
解释:(1)变量相加,首先首先进行类型提升,之后再进行计算,计算后将结果赋值;
(2)常量相加,首先进行计算,之后判断是否在接受类型的范围,在则赋值。
2.类型强制转换溢出结果计算
A:byte b = (byte)300;
a: 300的二进制int类型表示
00000000 00000000 00000001 00101100
b: 截断为byte类型(强转)
00101100
符号位
数值位
0
0101100
c: 转为十进制数(正数原、反、补码相同)
符号位
数值位
补码
0
0101100
反码
0
0101100
原码
0
0101100
十进制数为: 44
B:
byte b = (byte)130;
a: 130的二进制int类型表示
00000000 00000000 00000000 10000010
b: 截断为byte类型(强转)
10000010
符号位
数值位
1
0000010
c: 转为十进制数
符号位
数值位
补码
1
0000010
反码
1
0000001
原码
1
1111110
十进制数为: -126
3.扩展赋值运算符隐含强制类型转换问题
判断下列代码是否有误,并指出错误
short s = 1;
s = s + 1;
//错误,s在参加运算时会自动提示类型为int
//
int类型值无法直接赋值于short类型
short z = 1;
z += 1;
//正确,扩展赋值运算符包含强制类型转换
//等价于 z = (short)(z + 1);
4.位异或实现两变量交换值
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
//b = a ^ b ^ b = a;
a = a ^ b;
//a = a ^ b ^ a = b;
5.左移、右移、无符号右移的计算(针对二进制数的操作)
<< :左移,左边最高位丢弃,右边补齐0;
>> :右移,最高位是0,左边补齐0,最高位是1,左边补齐1;
>>> :无符号右移 无论最高位是0或1,左边补齐0.
a: -24 << 2
-24的二进制数为:10000000 00000000 00000000 00011000
反码:
11111111 11111111 11111111 11100111
补码: 11111111 11111111 11111111 11101000
左移:
(11)111111 11111111 11111111 1110100000
反码:
11111111 11111111 11111111 10011111
原码:
10000000 00000000 00000000 01100000
十进制为: -96
b: -24 >> 2
-24的二进制数为:10000000 00000000 00000000 00011000
反码:
11111111 11111111 11111111 11100111
补码: 11111111 11111111 11111111 11101000
右移:
1111111111 11111111 11111111 111010(00)
反码:
11111111 11111111 11111111 11111001
原码:
10000000 00000000 00000000 00000110
十进制数为: -6
c: -24 >>> 2
-24的二进制数为:10000000 00000000 00000000 00011000
反码:
11111111 11111111 11111111 11100111
补码: 11111111 11111111 11111111 11101000
无符右移:
0011111111 11111111 11111111 111010(00)
原码:
00111111 11111111 11111111 11111010
十进制数为: 1073741818
6.if语句和switch语句的应用场景
A: if
针对boolean类型的判断
针对一个范围的判断
针对几个常量的判断
B: switch
针对几个常量的判断
7.switch知识,看程序写结果(没有break,会发生case穿透现象)
A: int x = 2;
int y = 3;
switch(x){
default:
//3.执行
y++;
//4.y = 4
break;
//5.停止
case 3:
//1.不执行
y++;
case 4:
//2.不执行
y++
}
System.out.println(y);
//y = 4
B: int a = 2;
int b = 3;
switch(a){
default:
//3.执行
b++;
//4.b = 4
case 3:
//1.不执行 5.没有break,case穿透,继续执行
b++;
//6.b = 5
case 4:
//2.不执行 7.没有break,case穿透,继续执行
b++;
//8.b = 6
}
System.out.println(b)
//b = 6
8.switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
switch语句的表达式可以是:byte,short,int,char
JDK5之后可以是枚举
JDK7以后可以是String
答案:可以,不可以,JDK7以后可以
9.for循环打印阶乘问题
结果: 1!=1
1!+2!=3
1!+2!+3!=9
1!+2!+3!+4!=33
1!+2!+3!+4!+5!=153
代码: int a = 1;
int b = 0;
String str = null;
for(int i=1;i<=5;i++){
a *= i;
b += a;
if(a==1){
str = a + "!";
}else{
str = str+"+"+i+"!";
}
System.out.println(str+"="+b);
}
10.while循环小芳存钱问题
问题:小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,
她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
代码: double sum = 0;
int count = 1;
while (true){
sum += 2.5;
if(sum >= 100){
System.out.println("存100共用天数为:"+count);
break;
}
if(count%5 == 0){
sum -= 6;
}
count ++;
}
11.控制跳转语句问题
A:
break:中断
用在循环和switch语句中,可跳出单层循环,配合标签语句可跳出多层循环
B:
continue:继续
跳出单层循环的一次,循环可继续执行
C:
return:返回
结束方法,遇到return,程序将不再继续往后执行
练习:补全代码
for(int i = 1;i <= 10;i++){
if(1%3 == 0){
//填写代码
}
System.out.println("hello");
}
如何在控制台输出2次:hello
break;
如何在控制台输出7次:hello
continue;
如何在控制台输出13次:hello
System.out.println("hello");
12.嵌套for循环问题
打印九九乘法表
for (int x = 1; x <= 9; x++) {
for (int y = 1; y <= x; y++) {
int mul = y * x;
System.out.print(y + "*" + x + "=" + mul + "\t");
}
System.out.println();
}
13.数组的遍历
System.out.println("[");
for(int x = 0; x < arr.length; x++){
if(x == arr.length - 1){
System.out.println(arr[x] + "]");
}else{
System.out.println(arr[x] + ", ");
}
}
14.求数组中的最大值
int max = arr[0];
for(int x = 0; x < arr.length; x++){
if(arr[x] > max){
max = arr[x];
}
}
return max;
15.求数组中的最小值
int min = arr[0];
for(int x = 0; x < arr.length; x++){
if(arr[x] < min){
min = arr[x];
}
}
return min;
16.逆序
方式一:
for(int x = 0;x < arr.length/2; x++){
int temp = arr[x];
arr[x] = arr[arr.length - 1 -x];
arr[arr.length -1 -x] = temp;
}
方式二:
for(int start = 0,end = arr.length - 1;start <= end; start++,end--){
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
17.查找
方式一:
public static int getIndex(int[] arr,int value){
for(int x = 0; x < arr.length; x++){
if(arr[x] == value){
return x;
}
}
return -1;
}
方式二:
public static int getIndex(int[] arr,int value){
int index = -1;
for(int x = 0;x < arr.length; x++){
if(arr[x] == value){
index = x;
break;
}
}
return index;
}
18.二维数组遍历
public static void printArray(int[][] arr){
for(int x = 0; x < arr.length; x++){
for(int y = 0; y < arr[x].length; y++){
System.out.print(arr[x][y] + " ")
}
System.out.println();
}
}
19.二维数组求和
public static int sumArray(int[][] arr){
int sum = 0;
for(int x = 0; x < arr.length; x++){
for(int y = 0; y < arr[x].length; y++){
sum += arr[x][y];
}
}
return sum;
}
20.杨辉三角问题
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
//创建二维数组
int[][] arr = new int[n][n];
//为第一列和第x行的第x列赋值为1
for(int x = 0; x < arr.length; x++){
arr[x][0] = 1;
arr[x][x] = 1;
}
//从第三行开始,为其他列赋值
for(int x = 2; x < arr.length; x++){
for(int y = 1; y < x-1; y++){
arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
}
}
//遍历二维数组(注意:y的循环范围,对照乘法表)
for(int x = 0; x < arr.length; x++){
for(int y = 0; y < x; y++){
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
java分支练习题 java例题讲解
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
java基础练习题(方法练习题)
方法练习题
System 最小值 键盘录入 -
【Java】练习题
练习题
java 数据库 前端 1024程序员节 数据 -
循环与分支语句练习题
循环与分支语句练习题
#include i++ 退出程序 -
mysql select count 默认值
问题描述 需求:查询出每月 order_amount(订单金额) 排行前3的记录。例如对于2019-02,查询结果中就应该是这3条: 解决方法MySQL 5.7 和 MySQL 8.0 有不同的处理方法。1. MySQL 5.7我们先写一个查询语句。根据 order_date 中的年、月,和order_amount进行降序排列。然后,添加一个新列:order_amount(
mysql 查询不到记录取默认值 mysql 每个分类取5条 mysql分组查询 mysql查询本月第一周 order by 子查询