Java笔记
百知教育学习 - 胡鑫喆 - Java流程控制(计算机执行语句的顺序)
01_if条件分支结构
- 基本的if条件语句
- 语法:
if(布尔表达式){
语句系列
}
else{
语句系列
}
布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。他可以是一个单出的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。与C语言不同不能写整数,只能放布尔表达式
语句系列(代码块):可选参数,可以是一条或多条语句,当表达式的值为true是执行这些语句。若语句系列只有一条语句,则可以省略条件语句中的“ { }”。
package a1;
import java.util.Scanner;
public class TextIf{
public static void main(String[] args){
Scanner s = new Scanner (System.in);
int n = s.nextInt();
if(n % 2 == 0){
System.out.println("偶数");
}
else System.out.println("奇数") ;
}
}
- 多重if选择结构
- 语法:
if(布尔表达式){
代码块1
}else if(布尔表达式){
代码块2
} else if(布尔表达式){
代码块3
} else{
代码块4
}
条件表达式1~条件表达式n:必要参数。可以有多个表达式组成,但最后返回的结果一定要为boolean类型
语句系列:可以是一条或多条语句,当条件表达式1的值为true时,执行语句序列1;当条件表达式2的值为true时,执行语句序列2;以此类推。当省略任意一组语句序列时,可以保留其外面的“ { } ”,也可以将“ { } ”替换为 “ ; ”。
package a1;
import java.util.Scanner;
public class TextIf{
public static void main(String[] args){
Scanner s = new Scanner (System.in);
int n = s.nextInt();
if(n < 0) {
System.out.println("数据错误");
System.exit(0);//程序退出
}else if(n <= 2) {
System.out.println("婴儿");
}else if(n <= 12) {
System.out.println("儿童");
}else if(n <= 30) {
System.out.println("青年");
}else {
System.out.println("中年和老年");
}
}
}
如果使用并列if语句写出该结构,必须把n的范围写全
- 嵌套if选择结构
执行流程:当外层条件满足时,再判断内层条件
注意:一个选择结构中,可嵌套另外一个选择结构(只要嵌套格式正确,支持任意组合)- 语法:
if(外层表达式){
if(内层表达式){
内层代码块1
}else{
内层代码块2
}
}
else{
外层代码块
}
02_switch_case结构
- switch结构
- 语法:
switch( int 表达式 ){
case 值1:代码块1
case 值2:代码块2
dafualt:代码块3
}
int 表达式:只能用 byte,short,int,char( JDK1.7开始switch case结构支持字符串类型(1.7版本也叫 7.0))
package a1;
import java.util.Scanner;
public class TextSwitch{
public static void main(String[] args){
Scanner s = new Scanner (System.in);
int n = s.nextInt();
switch(n){
case 1:System.out.println(1111);
case 2:System.out.println(2222);
case 3:System.out.println(3333);
default :System.out.println(4444);
}
}
}
break 可以跳出switch结构
package a1;
import java.util.Scanner;
public class TextSwitch{
public static void main(String[] args){
Scanner s = new Scanner (System.in);
int n = s.nextInt();
switch(n){
case 1:System.out.println(1111);break;
case 2:System.out.println(2222);break;
case 3:System.out.println(3333);break;
default :System.out.println(4444);break;
}
}
}
switch case 能表达的一定能用 if else 表达
但能用 if else 表达的不一定能用 switch case 表达
03_不确定循环
- 程序中的循环
- 概念:通过某种条件,重复执行一段逻辑死循环:(循环永远跳不出去)
- while 循环(执行0到n次)
- 语法:
while( 布尔表达式){
//循环逻辑(循环操作)
}
- 执行流程:
- 先对布尔表达式进行判断,判断结果为 true ,则执行逻辑代码
- 本次执行完毕后,在此进行判断,结果仍旧为true,则再次执行逻辑代码
- 纸质布尔表达式的结果为 false 时,才会退出循环结构,执行后续代码
package day3;
public class TextLoop {
public static void main(String[] args) {
int sum = 0;
int i = 1;//循环变量
while(i <= 100) {
sum += i;
i++;
}
System.out.println(sum);
}
}
- do while 循环(执行1到n次)
- 语法:
do{
逻辑代码(循环操作)
}while(布尔表达式)
- 执行流程:
- 先执行一次循环操作后,再进行布尔表达式的判断
- 如果结果为true,到再次执行循环操作
- 如果结果为false,才会退出循环结构,执行后续代码
package day3;
public class TextLoop {
public static void main(String[] args) {
int sum = 0;
int i = 1;//循环变量
do {
sum += i;
i++;
}while(i <= 100);
System.out.println(sum);
}
}
04_for 循环
- for 循环(分号前后代码均可以省略,但分号不能省略)
- 语法:
for(初始部分;循环条件;迭代部分){
//循环操作
}
- 执行流程:
- 先对布尔表达式进行判断,结果为true,则执行逻辑代码
- 本次执行完毕后,再次执行判断,结果仍为true,则再次执行逻辑代码
- 直至布尔表达式的结果为false时,才会退出循环结构,执行后续代码
package day3;
public class TextLoop {
public static void main(String[] args) {
int sum = 0;
int i = 1;//循环变量
for(i = 1; i<=100; i++) {
sum += i;
}
System.out.println(sum);
}
}
当循环知道多少次一般用 for 循环
当不知道多少循环次数用 while ,do
for循环:确定循环
while,do while :不确定循环
05_break_continue
package day3;
public class TextBreakContinue {
public static void main(String[] args) {
int i;
for(i=0; i<5; i++) {
for(int j = 0; j<4; j++) {
System.out.print("i="+i+" j="+j+"\t");
}
System.out.println();//换行作用
}
}
}
- break 语句
- 使用 break 语句可以跳出 switch 和 循环语句,从而中断当前循环
break 跳出最内层的循环
- 使用 break 语句可以跳出 switch 和 循环语句,从而中断当前循环
package day3;
public class TextBreakContinue {
public static void main(String[] args) {
int i;
for(i=0; i<5; i++) {
for(int j = 0; j<4; j++) {
if(i==2 && j==3) break;
System.out.print("i="+i+" j="+j+"\t");
}
System.out.println();//换行作用
}
}
}
在 Java 中提供了 标签 功能,可以使 break 跳出外层循环
package day3;
public class TextBreakContinue {
public static void main(String[] args) {
int i;
loop:for(i=0; i<5; i++) {
for(int j = 0; j<4; j++) {
if(i==2 && j==3) break loop;
System.out.print("i="+i+" j="+j+"\t");
}
System.out.println();
}
}
}
- continue语句
- continue 不是跳出循环体,而是结束本次循环,下面代码不再执行,直接进入下一次循环
package day3;
public class TextBreakContinue {
public static void main(String[] args) {
int i;
for(i=0; i<5; i++) {
for(int j = 0; j<4; j++) {
if(i==2 && j==2) continue;
System.out.print("i="+i+" j="+j+"\t");
}
System.out.println();//换行作用
}
}
}
在 Java 中提供了 标签 功能,可以使 continue 跳出外层循环
package day3;
public class TextBreakContinue {
public static void main(String[] args) {
int i;
loop:for(i=0; i<5; i++) {
for(int j = 0; j<4; j++) {
if(i==2 && j==3) break loop;
System.out.print("i="+i+" j="+j+"\t");
}
System.out.println();
}
}
}
06_局部变量
- 局部变量(在类内部的变量)
- 概念:声明在函数内部的变量,必须先赋值再使用
- 作用范围:定义行开始到所在代码块结束
- 注意:多个变量均为局部变量,在重合的作用范围内,不可出现重名(命名冲突)两个条件同时满足
解释:当在 if 语句中声明 b 变量后,if 语句执行完后,分配给 b 变量的存储空间会被回收(所以局部变量作用范围从定义那行开始到他所在的代码块结束)
注意:多个变量均为局部变量,在重合的作用范围内,不可出现重名(命名冲突)两个条件同时满足
附加: if (true) int i=10; 错误 没有括号只能执行一句,在 i 变量刚声明就已结束,所以错误(加上代码块就正确了)
07_案例_百钱买百鸡
- 穷举法:利用计算机计算速度优势,把所有求解可能计算一遍
- 水仙花数:153=13+53+33
问题:公鸡3元1只,母鸡2元一只,小鸡1元3只,现有100元想买100只鸡,如何买?(把钱花完)
package day3;
public class Exc1 {
public static void main(String[] args) {
for(int i = 0 ; i <= 100; i++) {
for(int j = 0 ; j <= 100; j++) {
int k = 100 - i - j;
int money = 3*i + 2*j + k/3;
if(money == 100) {
System.out.println("公鸡:"+i+" 母鸡:"+j+" 小鸡:"+k);
}
}
}
}
}
以上结果错误:原因是小鸡的数量必须是3的倍数,(因为1块钱3只)
正确代码:
package day3;
public class Exc1 {
public static void main(String[] args) {
for(int i = 0 ; i <= 100; i++) {
for(int j = 0 ; j <= 100; j++) {
int k = 100 - i - j;
if(k % 3 != 0) continue;
int money = 3*i + 2*j + k/3;
if(money == 100) {
System.out.println("公鸡:"+i+" 母鸡:"+j+" 小鸡:"+k);
}
}
}
}
}
简化代码:
公鸡的数量最多为33只;母鸡的数量最多买50只
然而公鸡买了 i 只时,母鸡最多买 (100 - 3 * i)/2;
package day3;
public class Exc1 {
public static void main(String[] args) {
for(int i = 0 ; i <= 33; i++) {
int max = (100 - 3 * i)/2;
for(int j = 0 ; j <= max; j++) {
int k = 100 - i - j;
if(k % 3 != 0) continue;
int money = 3*i + 2*j + k/3;
if(money == 100) {
System.out.println("公鸡:"+i+" 母鸡:"+j+" 小鸡:"+k);
}
}
}
}
}
08_案例_打印等腰三角形
- 打印等腰三角形(找规律)
package day3;
import java.util.*;
public class Exc2 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
for(int i = 0 ; i<n; i++) {
for(int j=0; j<n-i ; j++) {
System.out.print(" ");//打印n-1个空格
}
for(int k=0; k<2*i+1; k++) {
System.out.print("*");//打印2*i+1个*
}
System.out.println();//换行
}
}
}