java语法基础三学习笔记提纲
一、流程控制
1、顺序结构
2、分支结构
- if-else结构(三种格式) ```java //第一种格式 if(条件表达式){ 执行代码块; }
//第二种格式:二选一 if(条件表达式){ 执行代码块1; }else{ 执行代码块2; }
//第三种格式:多选一 if(条件表达式1){ 执行代码块1; }else if(条件表达式2){ 执行代码块2; }else if(条件表达式3){ 执行代码块3; } … else{ 执行代码块n; }
-Scanner类的使用- 第一步:导包import java.util.Scanner- 第二步:Scanner的实例化- 第三步:调用Scanner相关方法获取指定数据类型的变量- **注意1**:对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串。- **注意2**:需要根据相应的方法,来输入指定类型的值,如果输入的数据类型与要求的类型不匹配时,会报异常InputMisMatchException,导致程序终止-if-elseif几个注意点:- 针对于条件表达式:如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。- 如果多个表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。- 如果多个表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面,否则,范围小的就没机会执行。-获取一个随机数> Math.random()随机获取一个[0.0,1.0)的数> 公式:[a,b]:(int)(Math.random()*(b-a+1))+a-switch-case语句-语法```javaswitch(表达式){case 常量1:执行语句1;//break;case 常量2:执行语句2;//break;...default:执行语句n;//break;}
说明:
- 1、根据switch表达式的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句。 直到遇到break关键字或此switch-case结构末尾结束为止。
- 2、switch结构中的表达式,只能是如下的6种数据类型之一:byte、short、char、int、枚举类型(JDK5.0新增的)、String类型(JDK7.0新增的)。
- 3、case之后只能声明常量,不能声明范围。
- 4、break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。
- 5、break语句在switch-case结构中是可选的,不是必须的。
- 6、default:相当于if-else中的else。default结构也是可选的。而且位置可以随便放,但是建议放最后面。
- 7、如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
- 8、凡是可以使用switch-case的结构,都可以转换为if-else,反之,不成立。
- 9、我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。
3、循环结构
循环语句的4个组成部分
- (1)初始化部分
- (2)循环条件部分:是boolean类型
- (3)循环体部分
- (4)迭代部分
for循环
- 结构:
while循环
- 结构:
for循环和while循环是可以相互转换的。区别就是for循环和while循环的初始化条件部分的作用范围不同。
do-while循环
- 结构:
- 说明:do-while循环至少会执行一次循环体。
不在循环条件部分限制次数的结构
- for(;;)或while(true)
结束循环有几种方式?
- 方式一:循环条件部分返回false
- 方式二:在循环体中,执行break
嵌套循环
练习输出九九乘法表
练习输入100以内的质数(2是最小的质数),质数(素数),只能被1和它本身整除的自然数。(面试题)
//获取开始时间的毫秒数long startTime1 = System.currentTimeMillis();int count1 = 0;//方式一for(int i=2; i <= 500000; i++) {boolean isFlag = true;//标识i是否被除尽,一旦被除尽,修改其值。for(int j=2; j < i; j++) {if(i % j == 0) {isFlag = false;}}if(isFlag == true) {count1++;System.out.println(i);}//重置isFlagisFlag = true;}//获取结束时间的毫秒数long endTime1 = System.currentTimeMillis();System.out.println("所花费时间为:"+(endTime1-startTime1));System.out.println("质数的个数是:"+count1);//获取开始时间的毫秒数long startTime2 = System.currentTimeMillis();int count2 = 0;//质数输出的优化方式一for(int i=2; i <= 500000; i++) {boolean isFlag = true;//标识i是否被除尽,一旦被除尽,修改其值。for(int j=2; j < i; j++) {if(i % j == 0) {isFlag = false;break;//优化一:只对本身非质数的自然数是有效的。}}if(isFlag == true) {count2++;System.out.println(i);}//重置isFlagisFlag = true;}//获取结束时间的毫秒数long endTime2 = System.currentTimeMillis();System.out.println("所花费时间为:"+(endTime2-startTime2));System.out.println("质数的个数是:"+count2);//质数输出的优化方式二//获取开始时间的毫秒数long startTime3 = System.currentTimeMillis();int count3 = 0;//用于记录质数的个数for(int i=2; i <= 500000; i++) {boolean isFlag = true;//标识i是否被除尽,一旦被除尽,修改其值。for(int j=2; j <= Math.sqrt(i); j++) { //优化方式二:针对本身质数和非质数的自然数都有效,等号不能少if(i % j == 0) {isFlag = false;break;//优化一:只对本身非质数的自然数是有效的。}}if(isFlag == true) {System.out.println(i);count3++;}//重置isFlagisFlag = true;}//获取结束时间的毫秒数long endTime3 = System.currentTimeMillis();System.out.println("所花费时间为:"+(endTime3-startTime3));System.out.println("质数的个数是:"+count3);//质数输出方式优化三int count4 = 0;//用于记录质数的个数label:for(int i=2; i <= 500000; i++) {for(int j=2; j <= Math.sqrt(i); j++) { //优化方式二:针对本身质数和非质数的自然数都有效if(i % j == 0) {continue label;}}count4++;}System.out.println("质数的个数是:"+count4);
System类的currentTimeMills方法获取当前时间的Long型时间
break关键字和continue关键字的使用
区别:1、使用范围不同:break可以使用在switch-case和循环结构中,而continue只能使用在循环结构中。2、break表示结束当前循环,continue表示结束当次循环。相同点:break和continue后面不能声明执行语句,不然会编译不通过。
break默认跳出包裹此关键字最近的一层循环。
带标签的break和continue的使用。
return:并非专门用于结束循环的,他的功能是结束一个方法,当一个方法执行到一个return语句时,这个方法将被结束。与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
- 项目一:家庭记账软件
