Java流程控制
1 Scanner对象
Java可以通过使用Scanner类来获取用户的输入;
基本语法:
Scanner s=new Scanner(System.in);
通过Scanner类的next()于nextLine()方法获取输入的字符串,在读取前我们还要使用hasnext()与hasnextLine()判断是否还有输入的数据。
next()
- 一定要读取到有效字符之后才可以结束输入;
- 对输入的有效字符之前遇到 的空白,next()方法会自动将其去掉;
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next()不能得到带有空格的字符串。
NextLine()
5. 以Enter为结束符也就是说nextLine方法返回的是输入回车键之前的所有字符.
6. 可以活得空白
两个小案例:
案例一
要求我们可以输入多个数字,求其总和和平均值,每输入一个数字用回车键确认,并通过输入非数字来结束输入,并输出结果。
package com.Hai.Scanner;
import java.util.Scanner;
public class Dem07 {
public static void main(String[] args) {
/*我们可以输入多个数字,求其总和和平均值,每输入一个数字用回车键确认,并通过
输入非数字来结束输入,并输出结果
*/
Scanner scanner=new Scanner(System.in);
double sum=0;
int m=0;
System.out.println("请输入数据:");
while (scanner.hasNextDouble()){
double x=scanner.nextDouble();
sum=sum+x;
m=m+1;
System.out.println("你输入的是第"+m+"个数据,"+"当前的和为"+sum);
}
System.out.println("你一共输入了"+m+"个数据");
System.out.println("输入数据的总和为"+sum);
System.out.println("输入数据的平均值为"+sum/m);
scanner.close();
}
}
案例二
编写一个让电脑判断你输入的数据是整数还是小数的程序。
package com.Hai.Scanner;
import java.util.Scanner;
public class Dem06 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
boolean flag=true;
int i=0;
float f=0.0f;
System.out.println("=====这是一个猜你输入的数据是整数还是小数的小游戏=====");
while(flag){
System.out.println("请输入一个小数或是一个整数:");
if(scanner.hasNextInt()){
i=scanner.nextInt();
System.out.println("你输入的是一个整数");
System.out.println("输入的整数为"+i);
}else{
f=scanner.nextFloat();
System.out.println("你输入的是一个小数");
System.out.println("输入的小数为"+f);
}
}
scanner.close();
}
}
2 顺序结构
顺序结构就是代码从上往下执行的结构。
3 选择结构
3.1 if单选择结构
package com.Hai.struct;
import java.util.Scanner;
public class Dem01 {
public static void main(String[] args) {
//if的单选择结构
Scanner scanner=new Scanner(System.in);
System.out.println("请输入数:");
String s=scanner.nextLine();
if(s.equals("hello")){
System.out.println(s);
}else{
System.out.println("End");
}
scanner.close();
}
}
3.2 if双选择结构
package com.Hai.struct;
import java.util.Scanner;
public class Dem02 {
public static void main(String[] args) {
//考试大于60分就是及格,小于60分就是不及格;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入成绩");
double d=scanner.nextDouble();
if(d<=60){
System.out.println("成绩不及格");
}else{
}
scanner.close();
}
}
3.3 if多选择结构
package com.Hai.struct;
import java.util.Scanner;
public class Dem03 {
public static void main(String[] args) {
//if的多选择结构
Scanner scanner=new Scanner(System.in);
while(true){
System.out.println("请输入数据");
double d=scanner.nextDouble();
if(d==100){
System.out.println("成绩满分");
}else if(d>=90){
System.out.println("成绩优秀");
}else if(d<90&&d>80){
System.out.println("成绩为A");
}else if (d>70&&d<80) {
System.out.println("成绩为B");
}else if (d>60&&d<70) {
System.out.println("成绩及格");
}else{
System.out.println("成绩不及格");
}
}
// scanner.close();留一个问题,这里为啥会报错?
}
}
3.4 嵌套的if结构
嵌套就是if选择结构里面还有if结构。
3.5 switch多选择结构
注意 case 的穿透原则,case的表达式后要写break;如果不写就会执行以后的代码;直到遇到一个break才会停止。
switch在JDK7以后支持表达式的结果是字符串;因为字符串的本质是数字。
案例3.5-1
package com.Hai.struct;
import java.util.Scanner;
public class switchDem01 {
public static void main(String[] args) {
//switch 选择结构
Scanner scanner=new Scanner(System.in);
System.out.println("请输入成绩");
while(true){
String grade=scanner.nextLine();
switch (grade){
case"A":
System.out.println("优秀");
break;
case "B":
System.out.println("良好");
break;
case "C":
System.out.println("及格");
break;
case "D":
System.out.println("不合格");
break;
case "f":
System.out.println("挂科");
default:
System.out.println("未知等级");
}
}
//scanner.close();当使用while循环的时候,Scanner对象怎么关闭?
}
}
IDEA支持反编译,Java进行编译后是一个class文件,class文件时是一个二进制的字节码文件,需要进行编译后我们才看得懂。
例如,打开上面的案例3.5-1的class文件,对其进行编译,步骤如下:
把switchDem01.class文件复制到你打开的项目的目录中
编译后的结果对比如图
4 循环结构
4.1 while循环
案例4.1-1
输出0~100的数
package com.Hai.struct;
public class whileDem01 {
public static void main(String[] args) {
//输出0~100的数
int i=0;
while(i<100){
i++;
System.out.println(i);
}
}
}
案例4.1-2
计算1-100的和。
package com.Hai.struct;
public class whileDen02 {
public static void main(String[] args) {
//计算1+2+3···+100=?
int i=0;
int sum=0;
while(i<=100){
sum=sum+i;
i++;
}
System.out.println("1-100的和为:"+sum);
}
}
4.2 do····while循环
对于while循环而言,如果不满足条件,就不执行循环,但是,有时候我们需要即使不满足循环仍然要执行一次。
案例4.2-1
package com.Hai.struct;
public class doWhileDem01 {
public static void main(String[] args) {
//计算1+2+3···+100=?
int i=0;
int sum=0;
do{
sum=sum+i;
i++;
}while(i<=100);
System.out.println("");
}
}
案例4.2-2
do…while和while的区别
package com.Hai.struct;
public class doWhileDem02 {
public static void main(String[] args) {
int a=0;
System.out.println(a);
//do...while与while的区别:
//while如果不满足条件,就一次都不执行
while(a<0){
a++;
System.out.println(a);
}
System.out.println("================");
//do...while至少执行一次
do{
a++;
System.out.println(a);
}while(a<0);
}
}
4.3 for循环
1.在IDE中的for循环的快速写法 100.for回车
会出现
for (int i = 0; i < 100; i++) {
}
- for死循环的写法
//死循环
for (; ;) {
}
案例4.3-1
使用for输出1-10的数
package com.Hai.struct;
public class forDem01 {
public static void main(String[] args) {
//使用for输出1-10的数;
for (int i = 0; i <=10; i++) {
System.out.println(i);
}
}
}
案例4.3-2
计算1-100以内的奇数的和和偶数的和
package com.Hai.struct;
public class forDem02 {
public static void main(String[] args) {
//计算0-100以内奇数和偶数的和
int oddsum=0;//奇数的和
int evensum=0;//偶数的和
for (int i = 0; i <=100; i++) {
if(i%2==0){
evensum=evensum+i;
}else{
oddsum=oddsum+i;
}
}
System.out.println(evensum);
System.out.println(oddsum);
}
}
案例4.3-3
用while或者for循环 输出0-1000内之间能被5整除的数,并且每一行输出3个.
println表示输出会换行
print表示输出不会换行
package com.Hai.struct;
public class forDem03 {
public static void main(String[] args) {
//用while或者for循环 输出0-1000内之间能被5整除的数,并且每一行输出3个
for (int i = 0; i <=1000; i++) {
if(i%5==0){
System.out.print(i+" ");
}
if(i%(5*3)==0){
//System.out.println();
System.out.print("\n");
}
}
}
}
案例4.3-7
打印九九乘法表
package com.Hai.struct;
public class forDem04 {
public static void main(String[] args) {
//打印九九乘法表
//方法一:输出如下:
/*
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
*/
for (int j = 1; j <=9; j++) {
for (int i = j; i <=9; i++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
//方法二:
/*
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
*/
for (int j = 1; j <=9; j++) {
for (int i = 1; i <=j; i++) {
System.out.print(i+"*"+j+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
4.4 Java5中引用了一种主要应用于数组的增强型for循环
java5中的增强for循环是用来偷懒得;
案例4.4-1
package com.Hai.struct;
public class forDem06 {
public static void main(String[] args) {
int[] number={10,20,30,40,50};//定义一个数组
for(int x:number){
System.out.println(x);
}
}
}
break continue的使用
break可以用于强行突出循环,不执行循环中剩余的语句;
continue在循环体中,用于终止某次循环的过程,即跳过循环体中尚未执行的语句,接着下一次的循环;
案例continue
package com.Hai.struct;
public class continueDem01 {
public static void main(String[] args) {
int i=0;
while(i<100){
i++;
if(i%10==0){
System.out.println();
continue;
}
System.out.println(i);
}
}
}
案例break
package com.Hai.struct;
public class breakDem01 {
public static void main(String[] args) {
int i=0;
while(i<100){
i++;
if(i==15){
break;
}
System.out.println(i);
}
}
}
5 练习题训练
打印三角型
package com.Hai.struct;
public class PraticeDem01 {
public static void main(String[] args) {
//打印三角形
/* *
***
*****
*******
********* */
for (int i = 1; i <=5; i++) {
for (int j= 5; j>=i; j--) {
System.out.print(" ");
}
for (int j= 1; j<=i; j++) {
System.out.print("*");
}
for (int j= 1; j<i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}