1.顺序结构
1.1输出语句
1.换行输出:
System.out.println(输出内容); // 括号里面可以为空,表示空行
2.不换行输出:
System.out.print(输出内容);//括号里面不能为空,为空报错
3. 格式化输出
System.out.printf(输出内容)
占位符:
%d:十进制整数
%f:浮点数
%c:单个字符
%b:boolean值
%s:字符串
public class TestPrintf {
public static void main(String[] args) {
byte b = 127;
int age = 18;
long bigNum = 123456789L;
float weight = 123.4567F;
double money = 589756122.22552;
char gender = '男';
boolean marry = true;
String name = "张三";
System.out.printf("byte整数:%d,年龄:%d,大整数:%d,身高:%f,身高:%.1f,钱:%f,钱:%.2f,性别:%c,婚否:%b,姓名:%s", b,age,bigNum,weight,weight,money,money,gender,marry,name);
}
}
1.2.输入语句
1.控制台键盘输入:
1、先声明一个Scanner类型的变量,并赋值一个对象
Scanner:是一个文本扫描仪类型,它的全名称是java.util.Scanner,它是核心类库中定义好的,可以直接用
Scanner是一个类,不是基本数据类型,是引用数据类型,所以必须给它赋值一个“对象”。2、提示用户输入xx:System.out.println("请输入一个整数:");//先执行,先显示这句话
不写不会错,不够“友好”3、从控制台接收用户输入的一个xx数据,并且赋值给合适的变量
int 变量 = input.nextInt(); //input是Scanner类型的变量,上面叫什么名,下面就用什么名
double 变量 = input.nextDouble();
long 变量 = input.nextLong();
boolean 变量 = input.nextBoolean();
String 变量 = input.next();
char 变量 = input.next().charAt(0);如果要接收数据的变量的数据类型和用户输入的数据的数据类型不符合,会报 InputMisMatchException输入不匹配错误
4、关闭IO流
import java.util.Scanner;
public class TestInput {
public static void main(String[] args) {
//全名称使用法
//java.util.Scanner input = new java.util.Scanner(System.in);
Scanner input = new Scanner(System.in);
//这句代码唯一可以改的是input,它是一个变量名
System.out.print("请输入一个整数:");//先执行,先显示这句话
int num = input.nextInt();//接收键盘输入, 它们有顺序要求
System.out.println("num = " + num);
System.out.print("请输入一个小数:");
double d = input.nextDouble();
System.out.println("d = " + d);
System.out.print("请输入一个布尔值:");
boolean b = input.nextBoolean();
System.out.println("b = " + b);
System.out.print("请输入一个大整数");
long big = input.nextLong();
System.out.println("big = " + big);
System.out.print("请输入一个字符串");
String str = input.next();
System.out.println("str = " + str);
System.out.print("请输入单个字符:"); //没有input.nextChar
char c = input.next().charAt(0);
/*
input.next():接收一个字符串,很多个字符
input.next().charAt(0):表示从多个字符中取1个字符,取第1个
charAt(0):表示取一个字符串的第1个
charAt(1):表示取一个字符串的第2个
charAt(2):表示取一个字符串的第3个
...
如果输入的字符串的个数少于你要获取的位置,就报错StringIndexOutOfBoundsException字符串下标越界
*/
System.out.println("c = " + c);
input.close();//建议加上,如果不加代码没有错误,但是会造成JVM以外的操作系统相关内存没有得到释放
}
}
2.next()与nextLine()的区别
next(),读取输入的数据时,遇到空格等空白字符,就认为本次数据输入结束
nextLine(),读取输入的数据时,遇到回车换行才认为结束都是nextLine()没问题
下面一种情况会有问题:
上一个接收输入的语句是nextInt(),next(),nextDouble()....
下一个紧接着的接收输入的语句是nextLine()
这个时候发现第二个输入语句,还没有输入呢,就结束了。
结论:
如果字符串中不会包含空格,那么使用next()更好。
如果字符串中想要包含空格,那么nextLine()的前面还有其他输入的话,加一句input.nextLine()把前面的回车换行读取掉。
public class TestNextAndNextLine {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入年龄:");
int age = input.nextInt();
System.out.println("age = " + age);
input.nextLine();//左边不用变量不用接收,目的只是把年龄后面的回车换行符读取掉
//当下面name用的是nextLine(),就需要加这句代码,如果下面name用的是next()就不用加这句代码。
System.out.print("请输入一个姓名:");
String name = input.nextLine();
/*
next()方法:
张三 name = "张三";
张 三,认为张后面空格,就是结束了,而不是回车换行结束 name = "张";
nextLine()方法:
张三
张 三
都可以接收
*/
System.out.println("name = " + name);
input.close();
}
}
2.分支结构
1.if…else…分支结构
2.switch...case多分支选择结构
语法格式:
switch(表达式){
case 常量值1:
语句块1;
【break;】
case 常量值2:
语句块2;
【break;】
。。。
【default:
语句块n+1;
【break;】
】
}
执行过程:
(1)入口
①当switch(表达式)的值与case后面的某个常量值匹配,就从这个case进入;
②当switch(表达式)的值与case后面的所有常量值都不匹配,寻找default分支进入;不管default在哪里
(2)一旦从“入口”进入switch,就会顺序往下执行,直到遇到“出口”,即可能发生贯穿
(3)出口
①自然出口:遇到了switch的结束}
②中断出口:遇到了break等
注意:
(1)switch(表达式)的值的类型,只能是:4种基本数据类型(byte,short,int,char),两种引用数据类型(JDK1.5之后枚举、JDK1.7之后String)
(2)case后面必须是常量值,而且不能重复
3.Java12之后switch新特性
Switch 表达式也是作为预览语言功能的第一个语言改动被引入Java12 中,开始支持如下写法:
switch(month) {
case 3,4,5 -> System.out.println("春季");
case 6,7,8 -> System.out.println("夏季");
case 9,10,11 -> System.out.println("秋季");
case 12,1,2 -> System.out.println("冬季");
default->System.out.println("月份输入有误!");
};
3.循环结构
break:用于switch 或循环,表中断,结束本层循环或switch
continue:只用于循环,跳过本次循环剩余的循环体语句,如果后面没有语句,那写了也没作用。