Java流程控制
Scanner对象
Java Scanner 类 | 菜鸟教程 (runoob.com)
实现程序和人的交互,java.util.Scanner是Java5的新特性,获取用户输入。
基本语法:
Scanner s=new Scanner(System.in)
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入输入。
用完之后要关闭:sacnner.close()
next()和nextLine()的区别
next()
- 一定要读取到有效字符串之后才可以结束输入。
- 对输入有效字符串之前遇到的空白,next()方法自动将其去掉。
- 只有输入有效字符之后才将其后面输入的空白作为分隔符或者结束符。
- next()不能得到带有空格的字符串
nextLine()
- 以Enter键结束,返回的是输入回车之前所有的字符。
- 可以获得空格。
package com.lmc.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("使用next方式接受:");
/*
输入字符串
*/
//判断用户有没有输入字符串
// if (scanner.hasNext()){
// String str=scanner.next();
// System.out.println("输入的内容位"+str);
// }
/*
输入一行数据
*/
if (scanner.hasNextLine()){
String str=scanner.nextLine();
System.out.println("输入的内容位"+str);
}
scanner.close();//用完知乎关闭流
}
}
程序结构
顺序结构
最基本的程序结构
选择结构
if单选择结构
if(布尔表达式){
执行语句
}
s.equals()是专门用来判断字符串相等的函数,字符串相等一般不用==判断。
if双选择结构
if(布尔表达式){
执行语句1
}else{
执行语句2
}
if多选择结构
if(布尔表达式1){
执行语句1
}else if(布尔表达式2){
执行语句2
}else if(布尔表达式3){
执行语句3
}else{
执行语句4
}
注意
- if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
- if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
- 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。
if嵌套结构
可以提高效率,任何一种if语句都可以嵌套。
switch选择结构
也是一种多选择结构,switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
switch(expression){
case value1:
语句;
break;
case value2:
语句;
break;
default :
语句
}
switch种的变量类型可以是byte,short,int或者char,Java7之后也支持String类型,但是在编译过程种,依旧是把字符串编译成hashCode来运行的。
Java hashCode() 方法 | 菜鸟教程 (runoob.com)
break一定要有,否则会把下边的语句全部执行一遍,switch穿透。
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
循环结构
- while循环
- dowhile循环
- for循环
- 增强型for循环,用来便利数组
while循环
最基本的循环。
while(布尔表达式){
执行语句
}
只要布尔表达式为真,就一直运行,所以需要一个语句使得表达式不成立。但是在一些服务器种,为了监听某种信号,需要一直循环。
==dowhile循环与while循环区别:==while循环如果条件不满足,将不会进入循环,而dowhile循环,即使条件不满足,也至少执行一次。
do{
执行语句
}while(表达式)
for循环
for(初始化;布尔表达式;更新){
}
是最有效,最灵活的一种循环结构,执行次数在执行前就确定。
关于 for 循环有以下几点说明:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测布尔表达式。循环执行上面的过程。
快捷键:10.for,会直接生成一个循环语句
System.out.print() 输出完不换行
System.out.println() 输出完换行
打印乘法表
package com.lmc.struct;
public class ForDemo01 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int i1 = 1; i1 <= i; i1++) {
System.out.print(i1+"*"+i+"="+i*i1+"\t"); //在输出的时候数值和字符可以直接用+号连接
}
System.out.println();
}
}
}
增强型for循环
JDK5之后才有,主要是对数组进行遍历。
for (声明语句:表达式)
{
执行语句
}
**声明语句:**声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
**表达式:**表达式是要访问的数组名,或者是返回值为数组的方法。
package com.lmc.struct;
public class ForDemo02 {
public static void main(String[] args) {
int[] numbers={10,20,30,40,50};
for(int x:numbers){ //从number种遍历出每一个变量赋值给x,直到所有的数都遍历完成。
System.out.println(x);
}
}
}
break,continue,goto
**break:**强制退出循环。
break 主要用在循环语句或者 switch 语句中;
用来跳出整个语句块,break 跳出最里层的循环,并且继续执行该循环下面的语句。
**continue:**结束本次循环,执行下次循环;continue 适用于任何循环控制结构中。
作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
**goto:**java并没有正式的使用goto语句,一般用带标签的continue。
打印三角形
package com.lmc.struct;
public class ForDemo02 {
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 i1 = 1; i1 <= i; i1++) {
System.out.print("*");
}
for (int i2 = 1; i2 < i; i2++) {
System.out.print("*");
}
System.out.println();
}
}
}
思路:先打印几个空格,然后再打印星号,空格的个数在减少,星号个数增加。
package com.lmc.struct;
public class ForDemo02 {
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 i1 = 1; i1 <= i*2-1; i1++) {
System.out.print("*");
}
// for (int i2 = 1; i2 < i; i2++) {
// System.out.print("*");
// }
System.out.println();
}
}
}