java语法基础三学习笔记提纲

一、流程控制

1、顺序结构

2、分支结构

  • if-else结构(三种格式) ```java //第一种格式 if(条件表达式){ 执行代码块; }

//第二种格式:二选一 if(条件表达式){ 执行代码块1; }else{ 执行代码块2; }

//第三种格式:多选一 if(条件表达式1){ 执行代码块1; }else if(条件表达式2){ 执行代码块2; }else if(条件表达式3){ 执行代码块3; } … else{ 执行代码块n; }

  1. -
  2. Scanner类的使用
  3. - 第一步:导包import java.util.Scanner
  4. - 第二步:Scanner的实例化
  5. - 第三步:调用Scanner相关方法获取指定数据类型的变量
  6. - **注意1**:对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串。
  7. - **注意2**:需要根据相应的方法,来输入指定类型的值,如果输入的数据类型与要求的类型不匹配时,会报异常InputMisMatchException,导致程序终止
  8. -
  9. if-elseif几个注意点:
  10. - 针对于条件表达式:如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。
  11. - 如果多个表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
  12. - 如果多个表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面,否则,范围小的就没机会执行。
  13. -
  14. 获取一个随机数
  15. > Math.random()随机获取一个[0.0,1.0)的数
  16. > 公式:[a,b]:(int)(Math.random()*(b-a+1))+a
  17. -
  18. switch-case语句
  19. -
  20. 语法
  21. ```java
  22. switch(表达式){
  23. case 常量1:
  24. 执行语句1;
  25. //break;
  26. case 常量2:
  27. 执行语句2;
  28. //break;
  29. ...
  30. default:
  31. 执行语句n;
  32. //break;
  33. }
  • 说明:

    • 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和它本身整除的自然数。(面试题)

      1. //获取开始时间的毫秒数
      2. long startTime1 = System.currentTimeMillis();
      3. int count1 = 0;
      4. //方式一
      5. for(int i=2; i <= 500000; i++) {
      6. boolean isFlag = true;//标识i是否被除尽,一旦被除尽,修改其值。
      7. for(int j=2; j < i; j++) {
      8. if(i % j == 0) {
      9. isFlag = false;
      10. }
      11. }
      12. if(isFlag == true) {
      13. count1++;
      14. System.out.println(i);
      15. }
      16. //重置isFlag
      17. isFlag = true;
      18. }
      19. //获取结束时间的毫秒数
      20. long endTime1 = System.currentTimeMillis();
      21. System.out.println("所花费时间为:"+(endTime1-startTime1));
      22. System.out.println("质数的个数是:"+count1);
      23. //获取开始时间的毫秒数
      24. long startTime2 = System.currentTimeMillis();
      25. int count2 = 0;
      26. //质数输出的优化方式一
      27. for(int i=2; i <= 500000; i++) {
      28. boolean isFlag = true;//标识i是否被除尽,一旦被除尽,修改其值。
      29. for(int j=2; j < i; j++) {
      30. if(i % j == 0) {
      31. isFlag = false;
      32. break;//优化一:只对本身非质数的自然数是有效的。
      33. }
      34. }
      35. if(isFlag == true) {
      36. count2++;
      37. System.out.println(i);
      38. }
      39. //重置isFlag
      40. isFlag = true;
      41. }
      42. //获取结束时间的毫秒数
      43. long endTime2 = System.currentTimeMillis();
      44. System.out.println("所花费时间为:"+(endTime2-startTime2));
      45. System.out.println("质数的个数是:"+count2);
      46. //质数输出的优化方式二
      47. //获取开始时间的毫秒数
      48. long startTime3 = System.currentTimeMillis();
      49. int count3 = 0;//用于记录质数的个数
      50. for(int i=2; i <= 500000; i++) {
      51. boolean isFlag = true;//标识i是否被除尽,一旦被除尽,修改其值。
      52. for(int j=2; j <= Math.sqrt(i); j++) { //优化方式二:针对本身质数和非质数的自然数都有效,等号不能少
      53. if(i % j == 0) {
      54. isFlag = false;
      55. break;//优化一:只对本身非质数的自然数是有效的。
      56. }
      57. }
      58. if(isFlag == true) {
      59. System.out.println(i);
      60. count3++;
      61. }
      62. //重置isFlag
      63. isFlag = true;
      64. }
      65. //获取结束时间的毫秒数
      66. long endTime3 = System.currentTimeMillis();
      67. System.out.println("所花费时间为:"+(endTime3-startTime3));
      68. System.out.println("质数的个数是:"+count3);
      69. //质数输出方式优化三
      70. int count4 = 0;//用于记录质数的个数
      71. label:for(int i=2; i <= 500000; i++) {
      72. for(int j=2; j <= Math.sqrt(i); j++) { //优化方式二:针对本身质数和非质数的自然数都有效
      73. if(i % j == 0) {
      74. continue label;
      75. }
      76. }
      77. count4++;
      78. }
      79. 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处于多少层循环之内。

  • 项目一:家庭记账软件