1.三元运算符
一般条件判断 ? 结果1:结果2 (结果必须是数据,任意数据类型)
<1>.如果条件判断为true 最终返回结果1
<2>.如果条件判断为false 最终返回结果2
int javaScore=90;
int sqlScore=87;
int res1=javaScore>sqlScore?javaScore-sqlScore:sqlScore-javaScore;
对比if分支结构
int res2=0;
if(javaScore>sqlScore){
res2=javaScore-sqlScore;
}else{
res2=sqlScore-javaScore;
}
对比之下 三元运算符更为简洁
总结一下:
1.能够用三元运算符解决的问题一定可以if分支结构解决
2.能够用if分支结构解决的问题不一定能够用三元运算符解决
3元运算符是一个运算符号,必须要有返回值,对于打印输出内容的情况下不能使用三元运算符
比如 int age=20; 判断是否成年
if(age>=18){
System.out.println("成年");
}else{
System.out.println("未成年");
}
绝对不能
<1>.定义3个整数变量num1,num2,num3,找到其中的最大值和最小值?
可以选择用if 也可以选择用3元运算符,或者2个都用。
2.Scanner
Scanner:获取键盘输入的一个工具类(开发人员帮我们写了的一个工具类,里面写了很多工具方法)
//1.先定义Scanner类型的变量
(可以得到一个Scanner类型的变量,这个变量就是sc,通过sc就可以使用开发人员帮我们写好的一些工具方法)
Scanner sc=new Scanner(System.in);
//2.提醒用户输入什么类型的数据(比如,请用户输入用户名,请用户输入密码) 提示性的信息
System.out.println("请输入一个整数:");
//3.获取键盘输入的整数,并且将获取到的整数保存到自己定义的变量中
int num1=sc.nextInt();
//4.获取键盘输入的小数,并且定义小数类型变量保存
double num2=sc.nextDouble();
//其他基本数据类型 next类型名字 nextByte() nextBoolean().....
//5.获取键盘输入的字符串,并且定义字符串类型的变量保存
String str1=sc.next();//遇到空格和回车自动结束
注意:无法获取键盘输入的字符类型 nextChar()没有这个功能方法?
扩展:
1.sc.nextLine();//遇到回车才会自动结束
2.如何获取控制台输入的字符类型?
将字符串中的第一个符号转成字符l类型:
"china" ==>'c'
"c"===>'c'
String str="china";
char c1=str.charAt(0);//'c'
char c2=str.charAt(1);//'h'
.....
str.length();//返回字符串的长度(长度:字符由多少个符号组成)
--------------------------------------------------------------------------------------
hashNextInt():判断控制台输入的是否是一个整数(如果是整数返回true 不是整数返回false)
hashNextDouble():判断控制台输入的是否是一个小数(输入的是小数返回true,不是小数返回false)
其他类型同理.....
1.控制台输入单个字母 如果是小写字母 要求转成大写字母输出,如果是大写字母要求转成小写字母输出
3.switch-case(了解一下)
注意:
switch-case能够做的,使用多重if选择结构一定能够完成,但是多重if选择结构能够做的,switch-case不一定可以实现。
switch-case:针对等值判断进行进行多分支选择结构。(多分段,等值)
对比
多重if选择结构:多分支选择结构(多分支...)
具体语法结构:
switch(变量){
case 常量1:{
//代码块1
}break;
case 常量2:{
//代码块2
} break;
case 常量3:{
//代码块3
}break;
default:{
//代码块4
}
}
System.out.println("程序结束");
变量的数据类型:byte,short,int,char, jdk7之后 又支持了String类型
<1>.当变量的值等于常量值1 执行代码块1 遇到break就会直接跳出switch语句块 程序结束
<2>.当变量的值不等于常量1 但是等于常量2 执行代码块2 遇到后面break 跳出语句块 程序结束
<3>.当变量的值不等于常量1,常量2 但是等于常量3 执行代码块3 遇到后面break 跳出语句块 程序结束
<4>.当变量的值不等于常量1,2,3 执行代码块4 程序结束。
<1>.控制台输入A,B,C,D等级 打印出对应的评价(A优秀,B良好,C.及格,D 不及格)
<2>.ATM后台选择功能
***************************
1.存钱
2.取钱
3.转账
4.退出系统
****************************
请输入1-4:
1
您当前正在执行存钱的操作....
2
您当前正在执行取钱的操作....
3
您当前正在执行转账的操作....
4
欢迎下次光临
补充判断2个字符串是否相等
String str1="123";
String str2="123";
str1.eqauls(str2):判断2个字符串内容是否相等,相等返回true 不相等 返回false
------------------------------------------------------------------------
<3>.控制台输入一个年份,输入一个月份,要求输出当月总共有多少天?
1,3,5,7,8,10,12 (31天)
4,6,9,11(30天)
2月(闰年29天 平年 28天)
--------------------------------------------------------------
int month=sc.nextInt();
int days=0;
switch(month) {
case 4:
case 6:
case 9:
case 11:{
days=30;
}break;
case 2:{
//根据年份判断是否是闰年 闰年29天 平年 28天
if((year%4==0&&year%100!=0)||(year%400==0)) {
days=29;
}else {
days=28;
}
}break;
default:{
days=31;
}
}
System.out.println(year+"年"+month+"月总共有"+days+"天");
4.for循环(重点)
什么是循环?
1.学编程--->赚钱---->娶老婆---->生孩子
学编程---->赚钱---->娶老婆----生孩子
.....
-------------------------------------------------
项目中循环?
用户填写注册信息的时候
1.填写信息---->验证用户填写的信息---->验证不通过--->提醒用户重新输入,并且告诉他该怎么填写
--->填写信息-->...... (无法预测到底什么时候能够填写正确...)
2........
----------------------------------------------------------------------------
循环:重复做某件事情,应用到程序中重复执行某个代码块。。。
for循环的基本结构:
for(表达式1;表达式2;表达式3){
//代码块1(重复要执行的任务)
}
表达式1:一般用于做初始化一些数据
表达式2:用于判断能够进入循环(返回值是boolean 如果返回值是true 进入循环,如果返回值是false终止序循环)
表达式3:一般用于改变循环条件的(为了防止循环陷入死循环)
代码块1: 重复要做的事情
-----------------------------------------------------
for循环的执行流程
表达式1--->
表达式2(true)--->代码块1--->表达式3 1
表达式2 (true)--->代码块1---->表达式3 2
表达式2 (true)--->代码块1---->表达式3 3
....
表达式2 (false) 循环结束....
<1>.要求在控制台打印,100遍 我错了...
表达式1: int i=1;
表达式2: i<=100 1-100 都是true (101 false)
表达式3: i++;//每循环一次次数累加1
<2>.计算1+2+3+...+100 之和
int sum=0;
i=1 sum+=1; sum=1
i=2 sum+=2 sum=1+2
i=3 sum+=3 sum=1+2+3
.....
i=99 sum+=99 sum=1+2+3+....+99;
i=100 sum+=100 sum=1+2+3+...+99+100;
sum+=i;//重复要做的事情
---------------------------------------------
int sum=0;
for(int i=1;i<=100;i++) {
sum+=i;
}
System.out.println("1-100之和为:"+sum);
-----------------------------------------------------------------------------------
<3>.计算1-100之间所有的奇数之和
<4>.计算1-100之间所有的偶数之和
<5>.计算1-100之间个位数为3的所有数之和
--------------------------------------------------------------------------------------
<6>.有5个人做到一起,小明问第五个人多大了,比第四个人大2岁,第四个人比第三个人大2岁,
第三个人比第二个人大2岁,第二个人比第一个人大2岁,第一个人说我5岁了,请问第五个人多大了?
------------------------------------------------------------------------------------
<7>.一小球从100米的高处落下,每一次反弹的高度为上一次的一半,问小球第10次落地经历的路程为多少?以及下一次反弹的高度是多少?
<8>.现有50瓶饮料,3个空瓶子可以换一瓶饮料,问最终能够喝到多少瓶饮料,如果喝到最后,2个空瓶,可以借一瓶?
75?
总结:对于循环次数固定的使用for循环更加简洁.
5.while 循环(重点)
for(表达式1;表达式2;表达式3){
//代码块1(重复要执行的任务)
}
对比
while循环结构
表达式1:一般用于做初始化一些数据
//用于判断能够进入循环(返回值是boolean 如果返回值是true 进入循环,如果返回值是false终止序循环)
while(表达式2){
//代码块1(重复要做的事情)
表达式3 :一般用于改变循环条件的(为了防止循环陷入死循环)
}
表达式1--->
表达式2(true)--->代码块1--->表达式3 1
表达式2 (true)--->代码块1---->表达式3 2
表达式2 (true)--->代码块1---->表达式3 3
<1>.要求在控制台打印,100遍 我错了...
<2>.计算1+2+3+...+100 之和
<3>.计算1-100之间所有的奇数之和
<4>.计算1-100之间所有的偶数之和
<5>.计算1-100之间个位数为3的所有数之和
-----------------------------------------------------------------------------
<6>.蜗牛学院现有5000名学员,每年增长10%,预计何时人数能够达到10000人?
总结: 对于循环次数不固定的情况下使用while循环会更加的方便
6.do-while循环(非重点)
基本结构
for(表达式1;表达式2;表达式3){
//代码块1(重复要执行的任务)
}
对比
表达式1:初始数据
do{
//代码块1 (重复要做的事情)
//表达式3 (改变循环条件,防止陷入死循环)
}while(表达式2); //控制能否进入循环(boolean数据 true 进入循环 false 不能进入循环)
表达式1===>
代码1===>表达式3
表达式2(true)==>代码1===>表达式3
表达式2(true)==>代码1===>表达式3
表达式2(true)==>代码1===>表达式3
表达式2(false)
--------------------------------------------------------------------------------------
<1>.1+2+...100?
<2>.1-100之间的奇数之和以及偶数之和?
------------------------------------------------------------------------------
<3>.要求控制台输入(y/n),如果输入的是n 提示 上下练习编码,下午参与考核,在进行测评
控制台输入(y/n) 如果输入的n 提示上下练习编码,下午参与考核,在进行测评
控制台输入(y/n) 如果输入的n ................................
y 循环结束
建议:先使用while循环 然后再使用di-while
6.1 循环总结
1.循环次数固定使用 for循环
2.循环次数不固定使用while,do-while
3.while循环先判断后执行,有可能一次都不执行
4.do-while 先执行一次,然后再判断,至少执行一次
5.常用的循环为for循环以及while循环
6.2 死循环
1.一般使用死循环的应用,都是使用while实现
while(条件判断){ 条件判断永久为true (真)
}
while(1==1){
}
while(true){
}
注意:虽然for循环也可以实现死循环
7.退出循环
for(int i=1;i<=5;i++){
System.out.println(i);
}
1
2
3
4
5
continue:结束本次循环,立即进入下一次循环
for(int i=1;i<=5;i++){
if(i==3){
continue;
}
System.out.println(i);
}
1
2
4
5
break:跳出当前所在的循环 (正常循环还是死循环都可以直接跳出)
for(int i=1;i<=5;i++){
if(i==3){
break;
}
System.out.println(i);
}
1
2
-------------------------------------------------------------------
<1>.比如输一个整数,如果输入的是一些非数值,提示其输入不合法,然后重新输入。。。
Scanner sc=new Scanner(System.in);
int num=0;
while(true) {//你输入的是整数才会跳出来...
System.out.println("请输入一个整数:");
if(sc.hasNextInt()) {//判断输入的是否是整数,是整数返回true,否则返回false
num=sc.nextInt();//是整数才有接受的必要,才不会报错
break;
}else {
System.out.println("您输入的格式不正确...");
sc.nextLine();//跳过异常 ,可以重新输入
}
}
System.out.println("控制台输入的整数为:"+num);
sc.close();
<2>.控制台输入年龄,要求年龄为0-100之间的整数,符合要求最终控制台打印...(优化)
<3>.控制台输入性别 ,性别只能是男或者女,输入其他的一律要求重新输入....(优化)
<4>.控制台输入年份(1900-2021),月份(1-12) ,判断当月的最大天数?(优化)
---------------------------------------------------------------------------
<5>注册个人信息,用户名 (长度3-5位组成),密码(6位组成),年龄(18-80岁之间,薪资(3000-30000)注册完成要求在控制台打印注册完成的个人信息;(优化)
String userName=null;.length()
String userPass=null; length()
int age=0;
double salary=0; hasNextDouble()
----------------------------------------------------------------------------
<6>.登录的优化,已知一个可用账号userName="admin",userPass="123456",完成登录;
要求:1.只能用户名或者密码写错了,只有3次机会登录
---------------------------------------------------
请输入用户名:admin
请输入密码:123
用户名或者密码错误,你还有2次登录机会...
.....
3次机会用完,直接退出程序(退出循环)...
------------------------------------------------------------
分析:1.在3次机会以内输入正确,循环终止,提示恭喜您登录成功...
2.3次机会内都输入错误,循环终止,账号已经锁定...
补充关于随机数:
Math.random():[0,1)之间的随机小数
||
产生[0,100)之间的小数?
Math.random()*100 [0,100) 之间的小数
||
产生[0,100)之间的整数?(int)(Math.ramdom()*100)
------------------------------------------------------------------
<1>.能够得到任意区间的随机整数?[a,b)
公式:(int)(Math.random()*(b-a))+a;
举例子测试说明:
[100,1000) : (int)(Math.random()*900)+100;
[-15,23):(int)(Math.random()*38)-15;
循环产生100个随机4位数?打印在控制台?
(int)(Math.random()*9000)+1000;
回顾字符串方法:
length():字符串的长度
charAt(index):根据下标从字符串中找到对应的符号
String str="china";
str.length():5
str.charAt(0)='c';
str.chatAt(1)='h';...
[0,str.length())
int rIndex=(int)(Math.random()*5);
str.charAt(rIndex);//随机从字符串中返回对应的符号
7. 随机验证码
String codeStr="1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
String str="";
//[0,codeStr.length());
for(int i=1;i<=4;i++) {
//1.得到随机的下标
int rIndex=(int)(Math.random()*codeStr.length());
//2.根据下标得到对应字符
char c=codeStr.charAt(rIndex);
str+=c;
}
System.out.println("随机验证码为:"+str);
8.嵌套循环
嵌套循环:就是将一个循环当做另一个循环的循环体。(双重循环)
比如:
for(....){
while(){
}
}
或者
while(..){
for(...){
}
}
或者
for(...){
while(...){}
for(...){}
}
总结:循环特点:如果满足条件判断,执行一次循环体
对于双重循环:外层循环循环一次,内存循环完整的循环一遍。。。
--------------------------------------------------------------------
三层循环:就是将一个双重循环当做另一个循环的循环体。。。
<1>.查看如下代码,统计循环的总次数
for(int i=1;i<=10;i++){
for(int j=1;j<=20;j++){
....
}
}
总共循环了多少次:
i=1 i=2
内层循环20次 内层循环20次 ...
10*20次
<2>.查看如下代码,统计循环的总次数
for(int i=1;i<=10;i++){
for(int j=1;j<=20;j++){
for(int k=1;k<=30;k++){
}
}
}
10*20*30;
1.打印九九乘法表
1 1x1=1
2 1x2=2 2x2=4
3 1x3=3 2x3=6 3x3=9
....
提示:
<1>.外层循环决定行数 9行 循环9次
<2>.内层循环决定对应行的列数 是第几行就有几列 有几列内层循环就循环几次
2.有3个班级各4名学员参赛,计算每个班级参赛学员平均分,统计成绩大于85分学员数?
<1>.外层循环决定班级? 3
<2>.内层循环决定对应班级的第几个学生? 4
3.有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?