Java键盘的录入
案例1:
import java.util.Scanner; //1.导入程序包
class ScannerDemo{
public static void main(String[] args) {
//Scanner Java提供的类可以用来获取从键盘中输入的数据
//2.创建键盘录入对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数");
//调用该方法,录入一个整数
int num=sc.nextInt();
//输出这个数字
System.out.println("你输入的数字是:"+num);
}
}
注意:
- 调用Scanner时需要导入程序包;
- Scanner需要大写
案例2:
键盘键入两个数,求最大值:
import java.util.Scanner; //1.导入包
class ScannerDemo2{
public static void main(String[] args) {
//2.创建Scanner对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个整数");
//3.录入用于输入的整数
int one=sc.nextInt();
System.out.println("请输入第二个整数");
//3.录入用于输入的整数
int two=sc.nextInt();
int max=one>two?one:two;
System.out.println("最大值是"+max);
}
}
总结:利用三元结构表示比较简洁
案例三:
比较两个键入的两个整数是否相等:
import java.util.Scanner;
class ScannerDemo3{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个整数");
int num1=sc.nextInt();
System.out.println("请输入第二个整数");
int num2=sc.nextInt();
//比较两个数是否相同
//boolean b=num1==num2?true:false;
String b=num1==num2?"相等":"不相等";
System.out.println(b);
}
}
流程控制语句
-
含义:在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以要求我们熟悉每条语句执行顺序来完成我们需要的功能。
-
分类:顺序结构、选择结构、循环结构
顺序结构
- 定义:是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
- 执行流程:由上往下依次执行
选择结构
- 定义:顾名思义就是可以根据要求选择性的执行相应的代码。
- 分类:if语句;switch语句。
if语句的使用
if语句的格式1
- if(比较表达式或者是boolean类型的值) {
语句体;
} - 执行流程:
先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体;
如果是false,就不执行语句体; - 案例演示
判断两个数据是否相等
class IFDemo{
public static void main(String[] args) {
int a=100;
int b=100;
if((a==b)){
System.out.println("Hello World!");
}
}
}
注意
条件选择语句 if:
if(要一个结果是boolean类型的表达式或者值){
/*当()里面的结果是true时就会执行{}大括号里面的语句体/
语句体
}
if语句格式2
- if(比较表达式) {
语句体1;
}else {
语句体2;
}
注意事项:else后面是没有比较表达式的,只有if后面有。* - 执行流程:首先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体1;
如果是false,就执行语句体2; - 案例
class IFDemo2 {
public static void main(String[] args) {
/*
if(条件){
条件为真,执行这个括号里面的代码
}else{
条件为假,执行这个括号里面的代码
}
*/
if(10+2>5-3){
System.out.println("这是真的");
}else{
System.out.println("这是假的");
}
}
}
if语句的格式2和三元的相互转换问题
案例
获取两个数中的最大值
import java.util.Scanner;
class IFDemo3{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个整数");
int a=sc.nextInt();
System.out.println("请输入第二个整数");
int b=sc.nextInt();
//采用if else 来做 获取两个数的最大值
//int max=a>b?a:b;
//获取和输出打印是两个概念
int max;
if(a>b){
max=a;
}else{
max=b;
}
System.out.println("最大值是"+max);
}
}
结论:
- 三元运算符实现的,都可以采用if语句实现。反之不成立。
- 什么时候if语句实现不能用三元改进呢?
当if语句控制的操作是一个输出语句的时候就不能。 - 为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。
案例
class IFDemo5{
public static void main(String[] args){
int a=100;
int b=10;
int c=18;
//求三个数的最大值
int max=0;
/*
if(a>b){
if(a>c){
max=a;
}else{
max=c;
}
}else{
if(b>c){
max=b;
}else{
max=c;
}
}*/
if(a>b&&a>c){
max=a;
}else if(b>a&&b>c){
max=b;
}else{
max=c;
}
System.out.println("最大值是:"+max);
}
}
if 语句格式3
格式:
if(比较表达式1) {
语句体1;
}else if(比较表达式2) {
语句体2;
}else if(比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
执行流程:
首先计算比较表达式1看其返回值是true还是false,
如果是true,就执行语句体1,if语句结束。
如果是false,接着计算比较表达式2看其返回值是true还是false,
如果是true,就执行语句体2,if语句结束。
如果是false,接着计算比较表达式3看其返回值是true还是false,
...
如果都是false,就执行语句体n+1。
注意事项: 当只要有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。
案例:
- 要求:键盘录入一个成绩,判断成绩等级
90-100 优秀
80-89 良
70-79 中
60-69 及格
0-59 差
import java.util.Scanner;
class IFDemo6{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的成绩 0---100 不要数小数");
int score=sc.nextInt();
if(score>=0&&score<60){
System.out.println("不及格");
}else if(score>=60&&score<80){
System.out.println("差");
}else if(score>=80&&score<90){
System.out.println("中");
}else if(score>=90&&score<100){
System.out.println("优良");
}else if(score==100){
System.out.println("满分");
}else{
System.out.println("成绩不合法");
}
}
}
案例二:
要求输入月份判断季节:
5. 用if语句实现下列需求:
键盘录入月份,输出对应的季节
3 4 5 春季
6 7 8 夏季
9 10 11 秋季
12 1 2 冬季
import java.util.Scanner;
class IFDemo7{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入 1---12 中的一个整数");
int num=sc.nextInt();
if(num==3||num==4||num==5){
System.out.println("春季");
}else if(num==6||num==7||num==8){
System.out.println("夏季");
}else if(num==9||num==10||num==11){
System.out.println("秋季");
}else if(num==12||num==1||num==2){
System.out.println("冬季");
}else{
System.out.println("你乱输的");
}
}
}
swith case 语句的使用
语句格式
switch语句的格式
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
…
default:
语句体n+1;
break;
}
注意
- 表达式的取值:byte,short,int,char;
- break表示中断意思,不加break会出现case贯穿现象;
- default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
执行流程
先计算表达式的值,然后和case后面的匹配,如果匹配成功就执行对应的语句,遇到break就会结束,否则执行default控制的语句
案例
class SwitchDemo{
public static void main(String[] args) {
//Switch语句,也是一种选择语句
int num=10;
switch(num){
case 10:
System.out.println("是一个10");
//break;
case 20:
System.out.println("是一个20");
// break;
case 30:
System.out.println("是一个30");
// break;
case 40:
System.out.println("是一个40");
//break;
case 100:
System.out.println("是一个100");
//break;
default:
System.out.println("以上case项都没有匹配上,执行默认项里面的代码");
break;
}
System.out.println("下来的程序");
}
}
case 穿透
case结束后不写break会继续执行下一个case,从而发生case穿透,可以加以利用:
- 键盘录入月份,输出对应的季节
3 4 5 春季
6 7 8 夏季
9 10 11 秋季
12 1 2 冬季
import java.util.Scanner;
class SwitchDemo7zi{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请键入数字");
int num=sc.nextInt();
switch(num){
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("乱输");
break;
}
}
}
注意
- case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的;
- default一定要在最后吗?不是,可以在任意位置。但是建议在最后;
- switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了
案例:
class SwitchDemo2{
public static void main(String[] args) {
int x = 2;
int y = 3;
switch(x){
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y); // 4
}
}
最终的输出结果是y=4
案例2:
class SwitchDemo2{
public static void main(String[] args) {
int x = 2;
int y = 3;
switch(x){
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
}
结果y=6
swith 和 if 语句区别
在做判断的时候,我们有两种选择:if语句和switch语句,那么,我们到底该如何选择使用那种语句呢?
13. if语句使用场景:
针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断
14. switch语句使用场景:
针对几个常量值的判断
循环语句
for循环
for循环语句格式
for(初始化表达式语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程
- 执行初始化表达式语句
- 执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环 - 执行循环体语句;
- 执行控制条件语句
- 返回2继续
注意初始化语句只执行一次
- 案例:
public class ForDemo3 {
public static void main(String[] args) {
for(int i=0;i<10;i++){
System.out.println("我爱你");
}
}
}
注意:
* int i=0 循环的初始值
* i<100 循环是否继续的条件
* i++ 控制语句
* {}大括号里面的代码,叫做循环体,就是你要重复执行的语句
- 循环的执行流程
* 1.先执行初始语句 int i=1;这条语句只执行一次
* 2.执行判断语句 i<100 如果是true 执行{}大括号里面的循环体语句
* 3.执行控制语句 i++
* 4.返回第2步继续执行,直到 i<10 是false 整个循环结束
利用for循环求和
- 案例一:
求出sum=1+2+…+100;
public class ForDemo {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=100;i++){
//sum=sum+i; //
sum+=i;
}
System.out.println("结果是:"+sum);
}
}
- 案例二
求1-100偶数和;奇数和;
public class ForDemo2 {
public static void main(String[] args) {
int ou=0;
int ji=0;
for(int i=1;i<=100;i++){
if(i%2==0){
ou+=i;
}else{
ji+=i;
}
}
System.out.println("偶数和是"+ou);
System.out.println("奇数和是"+ji);
}
}
for 循环之水鲜花
案例:
在控制台输出所有的”水仙花数”
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 111 + 555 + 333 = 1 + 125 + 27 = 153
package org.westos.demo3;
public class ForDemo3 {
public static void main(String[] args) {
int count=0; //定义一个统计变量
for(int i=100;i<=999;i++){
int ge=i%10;
int shi=i/10%10;
int bai=i/100%10;
int flowerNumber=ge*ge*ge+shi*shi*shi+bai*bai*bai;
if(i==flowerNumber){
System.out.println("水仙花数是: "+i);
count++;
}
}
System.out.println("水仙花数有"+count+"个");
}
}
while 循环
语句格式
- while循环的基本格式:
while(判断条件语句) {
循环体语句;
}
完整格式:
初始化条件语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
- 执行流程
- 执行初始化条件语句;
- 执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环 - 执行循环体语句;
- 执行控制条件语句
- 回到2继续。
案例
package org.westos.demo4;
public class WhileDemo {
public static void main(String[] args) {
//请输出10句我爱你
int i=1;
while (i<=10){ //条件
System.out.println("我爱你");
i++; //控制循环的语句,不要忘了
}
System.out.println("--------------------------------------");
//求1---100之间的和
int j=1;
int sum=0;
while (j<=100){
sum+=j;
j++;
}
System.out.println("和是 "+sum);
}
}
do while
语句格式
do {
循环体语句;
}while(判断条件语句);
完整格式;
初始化条件语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
执行流程
- 执行初始化条件语句;
- 执行循环体语句;
- 执行控制条件语句;
- 执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环 - 回到2继续;
案例
package org.westos.demo4;
public class DoWhileDemo {
public static void main(String[] args) {
int i=10;
do{
System.out.println("你好");
i--;
}while (i>2);
}
}
三种循环的区别
- do…while循环至少执行一次循环体。
而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。 - 如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。
因为变量及早的从内存中消失,可以提高内存的使用效率。
循环嵌套
案例一
输出一个4行5列的星星(*)图案
package org.westos.demo5;
public class ForDemo {
public static void main(String[] args) {
//结论:外层循环控制行数,里层循环空列数
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
System.out.print("*"); //打印不换行
}
System.out.println(); //仅仅输出一个换行符
}
}
}
注意:
System.out.println("");和System.out.print("");的区别
结论:
外循环控制行数,内循环控制列数
案例二
请输出下列的形状
*
**
***
****
*****
package org.westos.demo5;
public class ForDemo2 {
public static void main(String[] args) {
//输出一个三角形
//外层循环空行数,里层循环控制列数
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <=i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
控制跳转语句break语句
- 跳转语句的分类:
break 中断
continue 继续
return 返回 - break 使用在switch语句和循环语句中
离开使用场景的存在是没有意义的
案例
package org.westos.demo5;
public class ForDemo4 {
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
if(i==5){
break;
}
System.out.println("爱老虎油");
}
System.out.println("----------------------");
int j=1;
while (true){
j++;
if(j==7){
break;
}
System.out.println("爱老虎油");
}
}
}
控制跳转continue语句
- 使用场景:循环语句,离开使用场景是没有意义的
- 作用:跳出一次循环,执行下一步操作
案例
package org.westos.demo5;
public class ForDemo5 {
public static void main(String[] args) {
for (int i = 1; i <=10; i++) {
if(i==5){
continue; //跳过这次循环,继续下一次循环
}
System.out.println(i);
}
System.out.println("---------------------------");
for (int i = 1; i <= 10; i++) {
if(i%2==1){
continue;
}
System.out.println(i);
}
}
}