jgcs123

导航

 

运算符

2. 赋值运算

注意事项:

扩展的赋值运算符隐含了强制类型转换

3. 自增自减运算符

符号作用说明
++ 自增 变量的值加1
-- 自减 变量的值减1

注意事项:

  • ++和--既可以放在变量的后边,也可以放在变量的前边。

  • 单独使用的时候,++和--无论是放在变量的前边还是后边,结果是一样的。

  • 参与操作的时候,如果放在变量的后边,先拿变量参与操作,后拿变量做++或者--。参与操作的时候,如果放在变量的前边,先拿变量做++或者--,后拿变量参与操作。

4. 关系运算符

符号说明
== a==b,判断a和b的值是否相等,成立为true,不成立为false
!= a!=b,判断a和b的值是否不相等,成立为true,不成立为false
> a>b,判断a是否大于b,成立为true,不成立为false
>= a>=b,判断a是否大于等于b,成立为true,不成立为false
< a<b,判断a是否小于b,成立为true,不成立为false
<= a<=b,判断a是否小于等于b,成立为true,不成立为false

关系运算符的结果都是boolean类型,要么是true,要么是false。

5. 逻辑运算符

5.1 逻辑运算符概述

在数学中,一个数据x,大于3,小于6,我们可以这样来进行表示: 3<x<6。

在Java中,需要把上面的式子先进行拆解,再进行合并表达。

  • 拆解为:x>3和x<6

  • 合并后:x>3&&x<6

&&其实就是一个逻辑运算符。

我们可以这样说,逻辑运算符,是用来连接关系表达式的运算符。当然,逻辑运算符也可以直接连接布尔类型的常量或者变量。

5.2 逻辑运算符

5.3 短路逻辑运算符

符号作用说明
&& 短路与 作用和&相同,但是有短路效果
|| 短路或 作用和|相同,但是有短路效果

注意事项:

  • 逻辑与&,无论左边真假,右边都要执行。

    短路与&&,如果左边为真,右边执行;如果左边为假,右边不执行。

  • 逻辑或||,无论左边真假,右边都要执行。

    短路或||,如果左边为假,右边执行;如果左边为真,右边不执行。

最常用的逻辑运算符:&&,||,!

6. 三元运算符

  • 格式:关系表达式?表达式1:表达式2;

  • 范例: a > b ? a : b;

计算规则:

首先计算关系表达式的值

如果值为true,表达式1的值就是运算结果

如果值为false,表达式2的值就是运算结果

数据输入

1.2 Scanner使用的基本步骤

  1. 导包

    import java.util.Scanner;
    //导包的动作必须出现在类定义的上边
  2. 创建对象

    Scanner sc = new Scanner(System.in);
    //上面这个格式里面,只有sc是变量名
  3. 接受数据

    int i = sc.nextInt();

分支语句

1. 流程控制

1.1 流程控制语句概述

一直重复。循环结构

1.2 流程控制语句分类

  • 顺序结构

  • 分支结构(if,switch)

  • 循环结构(for,while,do...while)

1.3 顺序结构

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。

2. if语句

2.1 if语句格式1

格式:

if(关系表达式){

语句体;

}

执行流程:

  1. 首先计算关系表达式的值

  2. 如果关系表达式的值为true就执行语句体

  3. 如果关系表达式的值为false就不执行语句体

  4. 继续执行后面的语句内容

2.2 if语句格式2

格式:

if(关系表达式1){

语句体1;

}else{关系表达式2

语句体2;

}

执行流程:

  1. 首先计算关系表达式的值

  2. 如果关系表达式的值为true就执行语句体1

  3. 如果关系表达式的值为false就执行语句体2

  4. 继续执行后面的语句内容

2.3 if语句格式3

格式:

if(关系表达式1){

语句体1;

}else if {关系表达式2

语句体2;

}

...else{

语句体n+1;

}

执行流程:

  1. 首先计算关系表达式1的值

  2. 如果值为true就执行语句体1;如果值为false就计算关系表达式2的值

  3. 如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

  4. 如果没有任何关系表达式为true,就执行语句体n+1。

3. switch语句

3.1 switch语句格式

格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
[break;]
}

格式说明:

  • 表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String

  • case:后面跟的是要和表达式进行比较的值。

  • break:表示中断,结束的意思,用来结束switch语句。

  • default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

执行流程:

  1. 首先计算表达式的值。

  2. 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。

  3. 如果所有的case后面的值和表达式的值都不匹配,就会执行default

  4. 里面的语句体,然后程序结束掉。

注意事项:

在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break,或者整体switch语句结束

循环语句

1. for循环语句

1.1 循环结构

特征: 重复做某件事情 具有明确的开始和停止标志

循环结构的组成:

  • 初始化语句:用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样

  • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去

  • 循环体语句:用于表示循环反复执行的内容,简单说就是循环反复执行的事情

  • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

循环结构对应的语法:

  • 初始化语句:这里可以是一条或者多条语句,这些语句可以完成一些初始化操作

  • 条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体。例如: a<3

  • 循环体语句:这里可以是任意语句,这些语句将反复执行

  • 条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果。常见i++,i--这样的操作

1.2 for循环

格式:
for (初始化语句;条件判断语句;条件控制语句){
循环体语句;
}

执行流程:

  1. 执行初始化语句

  2. 执行条件判断语句,看其结果是true还是false

    如果是false,循环结束

    如果是true,继续执行

  3. 执行循环体语句

  4. 执行条件控制语句

  5. 回到 2. 继续

public class ForDemo02 {
   public static void main(String[] args) {
       //练习1: 计算0到100之间的奇数和偶数的和

       int oddSum = 0;
       int eveSum = 0;

       for (int i = 0; i <= 100; i++) {
           if (i%2!=0){   //意思为i模运算2不等于0
               oddSum+=i; // oddSum = oddSum+i
          }else {
               eveSum+=i;
          }

      }
       System.out.println("奇数的和:"+oddSum);
       System.out.println("偶数的和:"+eveSum);
  }
}

案例:水仙花

需求:在控制台输出所有的“水仙花数”

什么是“水仙花数”?

水仙花数是一个三位数

111 222 333 345 723

水仙花数的个位、十位、百位的数字立方和等于原数

分析:

  1. 三位数的个位数字如何求

    371 1就是原始数字对10进行取余运算的结果

  2. 百位数字如何求

    371 3就是原始数字除以100的结果(整除)

  3. 三位数的十位数字如何求

    371 371通过除以10,可以将7移动到个位上(整数)

    37通过对10进行取余运算可以得到最后一位的值7

思考:任意数字的指定位上的数值如何求

先使用整除操作将要求的数字移动到个位上,再使用取余操作取出最后一位上的值

123456789

先整除10000得到12345,再对10取余得到5

分析:

  1. 输出所有的水仙花数必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束

    for (int i = 100; i <= 999; i++)
  2. 不是每个三位数都是水仙花数,因此需要判定,满足条件的数字才进行输出

    if (执行的限制条件)
  3. 判定条件是将三位数中的每个数值取出来,计算立方和后与原始数字比较是否相等

    if (? + ? + ? == 原数) {输出原数}
  4. 在计算之前获取三位数中每个位上的值

    int a = 原数的个位;
    int b = 原数的十位;
    int c = 原数的百位;
    if ( a*a*a + b*b*b + c*c*c == 原数){
       输出原数
    }

     

public class ForTest04{
   public static void main(String[] args){
       for(int i=100; i<1000; i++){
           int ge = i&10;
           int shi = i/10&10;
           int bai = i/10/10&10;
           
           if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
               System.out.println(i);
          }
      }
  }
}

统计

统计有多少水仙花

public class ForTest05{
public static void main(String[] args){
int count = 0;
for(int i=100; i<1000; i++){
int ge = i&10;
int shi = i/10&10;
int bai = i/10/10&10;

if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
count++;
}
}
System.out.println("水仙花共有:" + count + "个")
}
}

 

2. while 循环语句

2.1 while循环语句

执行流程:

  1. 执行初始化语句

  2. 执行条件判断语句,看其结果是true还是false

  3. 如果是false,循环结束

  4. 如果是true,继续执行执行循环体语句

  5. 执行条件控制语句回到 2. 继续

 

输出5个HelloWorld

public class WhileDemo {
   public static void main(String[] args) {
       int j = 1;
       while(j<=5){
           System.out.println("HelloWorld");
           j++;
      }
  }
}

 

案例:珠穆朗玛峰

需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

public class WhileTest {
   public static void main(String[] args){
       int count = 0;
       double paper = 0.1;
       int zf = 8844430;
       whlie(paper <= zf){
           paper *= 2;
           count++;
      }
       System.out.println("需要折叠:" + count + "次");
  }
}

3. do...while循环语句

3.1 do...while循环语句格式

执行流程

  1. 执行初始化语句

  2. 执行循环体语句

  3. 执行条件控制语句

  4. 执行条件判断语句,看其结果是true还是false

    如果是false,循环结束

    如果是true,继续执行

  5. 回到②继续

  • 对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一-次。

  • do...while循环和while循环相似,不同的是,do...while循环至少会执行一次。

do{
 //代码语句
}while(布尔表达式);
  • While和do-While的区别:

  • while先判断后执行。do...while是先执行后判断!

  • Do...while总是保证循环体会被至少执行一次! 这是他们的主要差别。

3.2 三种循环的区别

三种循环的区别:

  • for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)

  • do...while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

for和while的区别:

  • 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了

  • 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

死循环格式:

for(;;){ }

while(true){ }

do{ }while(true);

while的死循环格式是最常用的

命令提示符窗口中Ctrl+C可以结束死循环

 

4. 跳转控制语句

4.1跳转控制语句概述

终止循环体内容的执行

  • continue 用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行

  • break 用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环

注意:使用是基于条件控制的

5. 循环嵌套

5.1 循环嵌套概述

语句结构:

  • 顺序语句 以分号结尾,表示一句话的结束

  • 分支语句 一对大括号表示if的整体结构,整体描述一个完整的if语句

    一对大括号表示switch的整体结构,整体描述一个完整的switch语句

  • 循环语句 —对大括号表示for的整体结构,整体描述一个完整的for语句

    一对大括号表示while的整体结构,整体描述一个完整的while语句do..while以分号结尾,整体描述一个完整的do..while语句

任何语句对外都可以看成是一句话,一句代码分支语句中包含分支语句称为分支嵌套

循环语句中包含循环语句称为循环嵌套

 

//外循环控制小时的范围,内循环控制分钟的范围

public class Test {
   public static void main(String[] args){
       for(int hour = 0; hour<24; hour++){
           for(int minute=0; minute<60; minute++){
               System.out.println(hour + "时" + minute + "分");
          }
           System.out.println("---------");
      }
  }
}

循环输出时间

 

 

6. Random

6.1 Random的作用和使用步骤

作用:用于产生一个随机数

使用步骤:

  1. 导包

    import java.until.Random;
    //导包的动作必须出现在类定义的上面
  1. new一个 Random

    Random r = new Random();

  2. 获取随机数

int number = r.nextInt(10); //获取随机数的范围:[0,10) 包括0,不包括10

 

获取一个1-100之间的随机数

import java.util.Random;
pubilc class RandomDemo {
   pubilc static void main(String[] agrs){
       Random r = new Random();
       int x = r.nextInt(100) + 1;
       System.out.println(x);
  }
}

 

案例:猜数字

需求:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?

当猜错的时候根据不同情况给出相应的提示

  • 如果猜的数字比真实数字大,提示你猜的数据大了

  • 如果猜的数字比真实数字小,提示你猜的数据小了

  • 如果猜的数字与真实数字相等,提示恭喜你猜中了

 

分析:

  1. 要完成猜数字的游戏,首先需要有一个要猜的数字,使用随机数生成该数字,范围1到100

  2. 因为无法预知几次能够猜中,因此猜数字这个操作应该是反复进行的,需要使用循环,而while循环通常用于描述未知循环次数的循环

  3. 使用程序实现猜数字,每次均要输入猜测的数字值,需要使用键盘录入实现

  4. 比较输入的数字和系统产生的数据,需要使用分支语句。这里使用if..else..if..格式,根据不同情况进行猜测结果显示,当猜中后使用break结束循环即可

 

import java.util.Random;
import java.util.Scanner;
pubilc class RandomTest {
   pubilc static void main (String[] args) {
       Random r = new Random();
       int number = r.nextInt(100) + 1;
       
       while(true) {
           Scanner sc = new Scanner(System.in);
           System.out.println("请输入你要猜的数字:");
           int guessNumber = sc.nxetInt();
           
           if(guessNumber > number) {
               System.out.println("你猜的数字" + guessNumber + "大了");
          } else if(guessNumber < number) {
                   System.out.println("你猜的数字" + guessNumber + "小了");
              } else {
               System.out.println("你猜中了");
               break;
          }
      }
  }
}

 

posted on 2021-06-16 23:58  Dongdong98  阅读(49)  评论(0)    收藏  举报