流程控制语句
通过一些语句,控制程序的执行流程
顺序结构
java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行
分支结构
1.if语句
格式
(1)if(关系表达式){语句体;}
(2)if(关系表达式){语句体1;}else{语句体2;}
(3)if(关系表达式){语句体1;}else if(关系表达式2){语句体2;}...else{ 语句体;}
2.switch语句
格式
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体;
break;
}
说明:
case后面跟的是要和表达式进行比较的值,是字面量而不是变量
break表示终端,跳出循环
default表示所有情况都不匹配的时候,就执行该处内容
case给出的值不允许重复
case当没有break 语句停止运行是,会出现穿透现象,会一直运行到default或者break
JDK12格式更新
switch(表达式){
case 值1 -> 语句体1;
case 值2 -> 语句体2;
...
default -> 语句体;
}
循环结构
1.for
for(初始化语句;条件判断语句;条件控制语句){循环体;}
2.while
初始化语句;
while(条件判断语句){循环体语句;条件控制语句;}
3.do...while
初始化语句;
do{循环语句;条件控制语句;}while(条件判断语句);
无限循环
循环中的判定语句恒为真
for(;;){循环体;}
while(true){循环体语句;}
do{循环语句;}while(true);
跳转控制语句
continue:跳过本次循环,继续执行下次循环
break:结束整个循环
获取随机数
其实和Scanner函数的用法类似
1.导包
import java.util.Random;导包在类定义上面
2.创建对象,使用Random这个类
Random r = new Random();
3.生成随机数
int number = r.nexInt(随机数的范围);
这里的范围表示从0开始的多少个数,比如说15那就是0~14
算法题
今天来三道基础的算法题,主要以思路为主
1.回文数,从左往右从右往左都是一样的数字,比如说121,现在问题是判断输入的是不是回文数
首先分析问题,了解回文数的特点有一样的数字,奇偶位数可能情况不一样,但是最重要的特点是这个数字倒过来和原本相等,因为其他条件你的判断可能不方便,但是这个就是判断是否相等就可以。另一个问题是输入的数字,位数,大小不确定,这里默认是正数。
有一些初步的想法可能就是慢慢求每一位上数然后判断是否相等,这样就单的数字可以处理,但是当数字多了就很难处理。所以我们要采取把它倒过来的方法。
因为是十进制,所以倒过来的操作很简单,就是用10来取余,然后乘10变到高位在循环中,每个数字乘循环数的10刚好可以倒过来。具体代码如下
public static boolean isPalindrome(int num) {
int originalNum = num;
int reversedNum = 0;
while (num > 0) {
int digit = num % 10;
reversedNum = reversedNum * 10 + digit;
num /= 10;
}
return originalNum == reversedNum;
}
2.求商和余数,要求不能用加乘除。
这个就回到我们的小学教程的思维,商的本质就是减法,其实题目也暗示了,所以用循环减法,记住次数和余数就是所求。
public static int[] divide(int dividend, int divisor) {
int quotient = 0;
while (dividend >= divisor) {
dividend -= divisor;
quotient++;
}
int remainder = dividend;
return new int[]{quotient, remainder};
}
3.求平方根,不要求精确
也就是循环,判断大小,感觉没什么难度。
4.判断是不是质数
质数就是只能被1和它本身整除,简单来说循环判断是否可以被整除,但是数字过大可能不好计算,而且浪费性能。可以利用刚刚的平方根,先求平方跟然后循环到平方根的次数,会大大减少。