流程控制
人与程序交互的Scanner
我们可通过Scanner类来获取用户的输入
Scanner基本语法:
Scanner sc=new Scanner(System.in);
-
通过 Scanner 类的 next() 和 nextLine()方法获取输入的字符串;
-
在读取前一般需要使用 hasNext() 和 hasNextLine()判断是否还有输入的数据。
if (sc.hasNext()){//后面没有加==就默认为true
//使用next接收数据
String str=sc.next(); //程序会一直等待用户输入完毕
System.out.println("输出的内容为:"+str);
}
nextLine():
// 以回车为结束符
1、nextLine() 方法返回输入回车之前的所有字符;
2、可以获得空白。
next():
// 以空格为结束符
1、一定要读取到有效字符后才可以结束输入;
2、对输入的有效字符之前遇到空白,next() 方法会自动将其去掉;
3、只有输入有效字符后才将其后面输入的空白作为分隔符或结束符;
4、next() 不能得到带有空格的字符串.
//输入数据
Scanner sc=new Scanner(System.in);
//接收数据
String str=sc.nextLint();
//关闭
sc.close();
对于Scanner类的常用方法:
-
String nextLine() 接收控制台输入的一个字符串
-
int nextInt() 接收控制台输入的一个int型数据
-
double nextDouble() 接收控制台输入的一个double型数据
-
note : 对于char类型输入的数据 Scanner 类没有提供直接输入char类型的方法,可通过 chatAt() 方法从 next() 或者nextLine () 获取输入的字符
/*next().charAt(0) 从控制台输入的字符串中获取第一个字符 */
/*"SHKO".charAt(1) 输出结果为H */
if选择结构
-
语法
if(布尔表达式){
//布尔表达式为true时执行
}else{
//布尔表达式为flase时执行
}
//多选择结构
//只执行其中一个
if(布尔表达式1){
//布尔表达式1为true时执行
}else if(布尔表达式2){
//布尔表达式2为true时执行
}else if(布尔表达式3){
//布尔表达式3为true时执行
}else{
//以上都不满足
}
/* if语句至多有1个else语句; if语句可以有若干个else if ,它们必须在else语句之前 */
switch多选择结构
switch case 语句判断一个变量与一系列值中某个值是否相等,每一个值称为一个分支.
switch(expression){
case value1:
//语句1
case value2:
//语句2
break;
````````//可以有任意数量的case语句
default:
//语句n+1
}
/*格式说明:
表达式:取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。
case:后面跟的是要和表达式进行比较的值。
break:表示中断,结束的意思,用来结束switch语句。
default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束掉。
*/
char grade='A';
switch(grade){
case 'A': //执行
System.out.println("优秀");
case'B':
System.out.println("良好");
break;
default:
System.out.println("未知等级");
}
/*控制台输出的是:
优秀
良好
但我们发现 A 对应的应该是优秀,这是因为我们的break在case'B',
它会把break之前的全部输出(我们称为case穿透)
=====这时我们应该在每个case后都加上break
*/
反编译
打开图示:
点开“我的电脑”,导航栏粘贴地址,找到对应demo的class文件复制 ,在IDEA中找到需要反编译的demo ,鼠标右键,打开所在文件夹下(show in Explorer)将前面所复制的class文件粘贴到该文件夹下,此时在IDEA中会生成一个新的demo,打开即可查看。
循环结构
最基本的while循环
while(布尔表达式){
//语句体
}
只要布尔表达式 为true,循环就会一直下去造成死循环,我们应尽量避免;
我们大多需要一个让表达式失效的方式来结束循环,少部分情况需要一直循环,比如服务器的请求响应监听等;
//1+2+ ……+100
public static void main(String[] args) {
//1+……+100
int i=0;
int sum=0;
while (i<=100) {
sum = sum + i;
i++;
}
System.out.println(sum);//5050
do……while循环
对于while来说不满足条件则不能进入循环,do……while循环至少执行一次;
//初始化表达式 // 1
do{
//语句体1 // 3
//语句体2 // 4
}while(布尔表达式); // 2
//执行顺序为 134>234>234……2不满足条件为止
for循环
是最有效、最灵活的循环结构
for(初始化变量;布尔表达式;变量更新){
//语句体
}
/* 最先执行初始化步骤,可以声明一种类型,可以初始化一个或多个循环控制变量,也可以是空语句; */
在IDEA中使用快捷键 例如:100.for加回车可自动生成
//1——100能被5整除的数,且每行输出3个
public static void main(String[] args) {
for (int i = 5; i <=100; i++) {
if (i%5==0){
System.out.print(i+"\t");
}
if (i%(5*3)==0){ System.out.print("\n");
//System.out.println("");
}
}
}
/*
print是不换行输出
println 是换行输出
*/
//九九乘法表
public static void main(String[] args) {
//打印第一列,嵌套循环,去掉重复,调整样式
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <=i; j++) {
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();//换行
}
}
/*
嵌套循环 总共的循环次数=外循环次数*内循环次数
*/
for和while的区别:
-
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到
了,⽽while循环结束还可以继 续使⽤,如果你想继续使⽤,就⽤while,
-
否则推荐使⽤for。原因是for循环结束,该变量就从内存中消 失,能够提
⾼内存的使⽤效率。
-
在已知循环次数的时候使⽤推荐使⽤for,循环次数未知的时推荐使⽤
while。
增强for循环
public static void main(String[] args) {
int[] numbers={10,20,30,40,50};
//遍历数组元素
for (int x:numbers){
System.out.print(x+" ");
}
/*相当于
for (int i = 0; i < 5; i++) {
System.out.print(numbers[i]+" ");
}
*/
}
跳出语句
break
break在任何循环语句的主体部分,均可使用break,强制退出循环,并不是结束程序;
continue
continue在循环语句体中,用于终止某次循环过程,即跳过循环语句中未执行的语句,接着进行下一次是否执行循环的判定;(结束本次循环,继续下次循环)
打印三角形
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();
}
}