流程控制
1.用户交互Scanner
-
先导包:import java.util.*;
-
基本语法:Scanner s =new Scaaner(System.in);
-
通过Scanner类的next()与nextLine()方法输入的字符串,使用hasNext()与hasNextLine()判断是否还有输入的数据
public class demo1{ public static void main (String[] args){ Scanner reader =new Scanner(System.in); //创建扫描器对象,用于接收键盘数据 System.out.println("使用next方式接收:"); //判断用户有没有输入字符串 if(reader.hasNext()){ String str =reader.next(); System.out.println("输出的内容是:"+str); } reader.close(); //凡是io流的类如果不关闭就会占用资源 } }
public class demo2{
public static void main (String[] args){
Scanner reader =new Scanner(System.in);
//创建扫描器对象,用于接收键盘数据
System.out.println("使用nextLine方式接收:");
//判断用户有没有输入字符串
if(reader.hasNextLine()){
String str =reader.nextLine();
System.out.println("输出的内容是:"+str);
}
reader.close();
//凡是io流的类如果不关闭就会占用资源
}
}
-
两者区别:若输入Hello World,前者输出Hello,后者输出Hello World
-
next():1.一定要读到有效字符才可以结束输入
2.对输入有效字符之前遇到的空白,next()方法会自动去除
3.对输入有效字符后才将其后面输入的空白作为分隔符或者结束符
4.next()不能得到带有空格的字符
-
nextLine():1.以enter作为结束符,也就是说nextLine()方法输入回车之前的所有字符
2.可以获得空白
-
Scanner 进阶拓展用法
import java.util.*;
punlic class Demo3{
public static void main (String[] args){
Scanner reader=new Scanner (System.in);
//从键盘接收数据
int i=0;
float f=0.0f;
Systm.out.println("请输入整数:");
if (reader.hasNextInt()){
i=reader.nextInt();
System.out.println("整数数据:"+i);
}
else
System.out.println("输入的不是整数数据");
reader.close();
}
}
hasNextInt();nextInt();
hasNextFloat();nextFloat();
hasNextDouble();nextDouble();
import java.util.*;
public class Demo4{
public static void main(String[] args){
Scanner reader=new Scanner (System.in);
//输入多个数字,并求出总和和平均数,没输入一个数字用回车键确认,通过输入非数字来结束输入并输出执行结果
double sum =0;//计算和
int num = 0;//计算输入了多少个数字
while(reader.hasNextDouble){
sum=sum+reader.nextDouble();
num++;
}
System.out.println(num+"个数的总和为"+sum);
System.out.println(num+"个数的平均数为"+(sum/num));
reader.close();
}
}
2.顺序结构
- java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
- 顺序结构是最简单的算法结构,从上到下
- 任何一个算法都离不开的一种基本算法结构
public class Demo5{
public static void main(String []args){
System.out.println("hello");
System.oout.println("hi");
}
}
3.选择结构
-
if单选择结构
if(布尔表达式){
//表达式为true执行的语句
} -
if双选择结构
if(布尔表达式){
//如果布尔表达式为true执行的语句
}else{
//如果表达式为false执行的语句
} -
if多选择结构
if(布尔表达式1){
//如果布尔表达式1为true
}else if(布尔表达式2){
//如果表达式2为true
}else {
//如果以上布尔表达式不为true执行代码
} -
嵌套的if结构
if(布尔表达式1){
if(布尔表达式2){}
} -
switch多选择结构
switch语句中的变量类型可以是:byte、short、int、char、String(JDK7开始)
case标签必须是字符串常量或者字面量
switch(expression){
case value :
//语句
break;
case value:
//语句
break;
···············
default :
//语句
}
import java.util.*;
public class IfDemo1{
Scanner reader =new Scanner(System.in);
System.out.println("请输入内容:");
String s=reader.nextLine();
//equals():判断字符串是否相等
if(s.equals("Hello")){
System.out.println(s);
}
System.out.println("End");
reader.close();
}
import java.util.*;
public class IfDemo2{
Scanner reader =new Scanner(System.in);
System.out.println("请输入分数:");
int score=reader.nextInt();
if(score>=60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
reader.close();
}
import java.util.*;
public class IfDemo3{
Scanner reader =new Scanner(System.in);
System.out.println("请输入分数:");
int score=reader.nextInt();
if(score>=60&&score<80){
System.out.println("及格");
}else if(score>=80&&score<=100){
System.out.println("优秀");
}else if(score>100&&score<0){
System.out.println("成绩不合理");
}else{
System.out.println("不及格");
}
reader.close();
}
public class SwitchDemo{
public static void main(String[] args){
char grade ='B';
switch(grade){
case 'A':
System.out.println("优秀");
break;//及时终止程序,防止穿透
//例如grade=A,后面没有break;那么后续的语句也会执行,知道遇到break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("合格");
break;
default:
System.out.println("不合格");
}
}
}
拓展:反编译 java——class——反编译(例如IDEA)
字符的本质是数字在反编译后像switch语句中即使输入的是字符串(String name = “夸父”);通过name.hasCode()方法找到对应的编码数字,再去找到对应的case语句。
4.循环结构
-
while循环
-
最基本的循环
while(布尔表达式){
//循环内容
}
-
只要表达式为true,循环就会一直执行下去
-
大多数情况要通过一个表达式失效的方式来结束循环
-
少部分(例如服务器的请求响应监听等)会让程序一直循环
-
正常业务中避免死循环,否则会影响程序性能甚至卡死崩溃
-
public class WhileDemo{
public static void main(String[] argd){
//输出1~100
int i=1;
while(i<=100){
System.out.println(i);
i++;
}
//计算1+2+^+100
int num = 0;
int sum =0;
while(num<=100){
num++;
sum=num+sum;
}
System.out.println(sum);
}
}
-
DoWhile循环
- 对于while语句而言,如果不满足条件,就不会进入循环,但是do_while语句至少会执行一次循环体
-
while先判断后执行;do_while先执行后判断
- do{
//代码语句
}(布尔表达式);
public class DoWhileDemo{ public static void main(String[] argd){ //计算1+2+^+100 int num = 0; int sum =0; do{ num++; sum=sum+num; }while(num<=100); System.out.println(sum); } }
- do{
-
for循环
-
支持迭代的一种通用结构,最有效、灵活的循环结构
-
for循环执行的次数是在执行前就确定下来的
for(初始化;布尔表达式;更新值){
//代码语句
}
public class ForDemo1{ public class void main (String[] args){ for(int i=0;i<=100;i++){ System.out.println(i); } System.out.println("for循环语句结束"); } }
public class ForDemo2{ public class void main(String[] args){ //计算0~100奇数和偶数的和 int oddSum=0; int evenSum=0; for(int i=0;i<100;i++){ if(i%2!=0) oddSum=oddSum+i; //oddSum+=i; else evenSum=evenSum+i; //evenSum+=i; } System.out.println("奇数的和:"+oddSum); System.out.println("偶数的和:"+evenSum); //用while循环或者for循环输出1~1000被5整除的数字,并且每行输出3个 for (inti=0;i<=1000;i++){ if(i%5==0){ System.out.println(i+"\t"); } if(i%(3*5)==0){ System.out.println(); //System.out.print("\n") //println输出后自动换行;print输出后不会自动换行 } } } }
//打印九九乘法表 public class ForDemo3 { public static void main(String[] args){ for(int i=1;i<=9;i++){ //下面语句如果是for(int j=1;j<=i;j++)则乘法表格式不同 for (int j=i;j<=9;j++){ System.out.print(i+"*"j+"="+i*j+" "); } System.out.println(); } } }
-
-
增强for循环(for each语句)(JDK5后引进)
-
for(声明语句:表达式){
//代码句子
} -
声明语句:声明新的局部变量,该变量的类型必须与数组元素类型相匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
-
表达式:访问的数组名,或者是返回值为数组的方法
public class ForEach { public static void main(String[] args) { int[] Arrays1 = {12, 23, 43, 25}; for (int i : Arrays1) { System.out.println(i); } //相当于下列for循环语句 for(int i=0;i<Arrays1.length();i++){ System.out.println(i); } } }
-
-
break;continue;
break 结束整个循环体,强制退出循环
continue会结束某一次循环然后跳至下一次循环,跳过循环体中尚未执行的语句
- 关于goto关键字,尽管goto仍然是java的一个保留字,但是尚未在Java语言中得到正式使用;Java没有goto。但是在break,和continue中我们可以观察到goto的影子···带标签的break和continue
- “标签”是指后面跟冒号的标识符,如label:
- java中唯一用到标签的地方是循环语句之前,然而在循环之前设置标签的唯一理由是,我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但是有标签的使用就会中断存在标签的地方