Java尚硅谷基础笔记-day3 流程控制函数

第二章 Java基本语法:变量与运算符

2.1关键字和保留字
2.2标识符
2.3变量

基本数据类型
基本数据类型变量间转换
基本数据类型与String间转换
进制与进制间的转换
2.4 运算符
2.5 程序流程控制

前四节笔记地址:Java尚硅谷基础笔记-day2 变量及运算符

2.5 程序流程控制

在这里插入图片描述
分支结构
在这里插入图片描述
if-else结构
在这里插入图片描述
注意:当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓;当多个条件是“包含”关系时,“小上大下 / 子上父下”
实例1:
在这里插入图片描述
补充知识:键盘输入
实现步骤:1.导包 import java.util.Scanner;
2.scanner的实例化:Scanner scan=new Scanner(System.in);
3.调用scanner类的相关方法,string类型是next(),其余类型为nextXxx(),char没有对应方法
与类型不匹配时会编译报异常

import java.util.Scanner;
class IfTest{
	public static void (main [] args){
	Scanner scan=new Scanner(System.in);
	int score=scan.nextInt();
	if (score==100){
	System.out.println("BMW");
	}else if (score>80){
	System.out.println("ipone");
	}else if(score>60){
	System.out.println("ipad");
	}else {
	System.out.println("none");
	}
}

实例2
以下代码输出结果是?

int x=4;
int y=1;
if(x>2){
	if(y>2)
		System.out.println(x+y);//	未执行
		System.out.println("atgu");	//	执行,相当于if(x>2)的执行语句
}else 
	System.out.println("x="+x);//	未执行
int x=4;
int y=1;
if(x>2)
	if(y>2)
		System.out.println(x+y);//	
		//System.out.println("atgu");	
else //就近原则,为y>2的else
	System.out.println("x="+x);//	执行

补充内容:随机数

//random()0-1随机数
//公式[a,b] (int)(Math.random()*(b-a+1)+a)
int value=(int)(Math.random()*90+10);//10-99随机数

补充内容:汉字的判断

//判断变量isHandsome是都等于“是”,不是“是”的都判断为false
isHandsome.equals("是")

switch-case结构
在这里插入图片描述
注意:
1.break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
2.default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default。
3.switch语句中,只能是下面六中数据类型:byte,short,char,int,枚举类型,string
实例1:
对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格” 。

//方法一
int score=78
switch(score/60){
	case 1:
		System.out.println("及格");
		break;
	case 0:
		System.out.println("不及格");
	break;
}
//方法二
int score=78
switch(score/10){
	case 10:
	case 9:
	case 8:
	case 7:
	case 6:
		System.out.println("及格");
		break;
	case 0:
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		System.out.println("不及格");
	break;
}

实例2:编写程序:从键盘上输入2020年的“month”和“day”,要求通过程序输出输入的日期为2020年的第几天。

switch(month){
case 12:
sumDays +=30;
case 11:
sumDays +=31;
case 10:
sumDays +=30;
case 9:
sumDays +=31;
case 8:
sumDays +=31;
case 7:
sumDays +=30;
case 6:
sumDays +=31;
case 5:
sumDays +=30;
case 4:
sumDays +=31;
case 3:
sumDays +=29;
case 2:
sumDays +=31;//一月的31天
case 1:
sumDays +=day;
}

说明:1.凡是可以用switch-case结构的,都可以转换为if-else。反之,不成立。
2.当可以使用switch-case结构,并且其表达式取值较少,选择switch-case。

循环结构
在这里插入图片描述
do-while循环相对其他两个循环来说,至少执行一次循环体。
最简单的无限循环格式:while(true),for(;😉,根据内部条件控制循环的结束。
结束循环方式有两种:一,循环条件部分返回false
二,在循环体内,执行break
实例
输出0-100的质数

方式一:

long start=System.currentTimeMillis();//计算当前时间距离1970-01-01 00:00:00 的毫秒数
for(int i=2;i<=100;i++){
	boolean isFlag=true;
	for(int j=1;j<i;j++){
		if(i%j==0)
		isFlag=false;
	}
	if(isFlag=true){
	System.out.println(i);
	}	
}
long end=System.currentTimeMillis();
System.out.println("所花费的时间"+(end-start));

优化一:break:只对于非质数管用

long start=System.currentTimeMillis();
for(int i=2;i<=100;i++){
	boolean isFlag=true;
	for(int j=1;j<i;j++){
		if(i%j==0)
		isFlag=false;
		break
	}
	if(isFlag=true){
	System.out.println(i);
	}	
}
long end=System.currentTimeMillis();
System.out.println("所花费的时间"+(end-start));

优化二:缩小j的范围,i/2

long start=System.currentTimeMillis();
for(int i=2;i<=100;i++){
	boolean isFlag=true;
	for(int j=1;j<=i/2;j++){
		if(i%j==0)
		isFlag=false;
		break
	}
	if(isFlag=true){
	System.out.println(i);
	}	
}
long end=System.currentTimeMillis();
System.out.println("所花费的时间"+(end-start));

优化三:缩小j的范围,sqrt(i),最好
例如质数97,97/2约等于48,当在2~48范围内时,除数都可以组成一对对的,比如2,48等等,sqrt(i)是最中间的一对,其左侧的数据是可以完全代表那些成对的数据。

long start=System.currentTimeMillis();
for(int i=2;i<=100;i++){
	boolean isFlag=true;
	for(int j=1;j<=Math.sqrt(i);j++){
		if(i%j==0)
		isFlag=false;
		break
	}
	if(isFlag=true){
	System.out.println(i);
	}	
}
long end=System.currentTimeMillis();
System.out.println("所花费的时间"+(end-start));

特殊关键字:break和continue
在这里插入图片描述
方式二:

long start=System.currentTimeMillis();
label:for(int i=2;i<=100;i++){
	boolean isFlag=true;
	for(int j=1;j<=Math.sqrt(i);j++){
		if(i%j==0)
		continue label;
	}
	if(isFlag=true){
	System.out.println(i);
	}	
}
long end=System.currentTimeMillis();
System.out.println("所花费的时间"+(end-start));
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值