一、从键盘输入数据:
Java提供了一个工具让我们可以手动输入一些数据:Scanner
从键盘输入需要三个步骤:
1、导包:import java.until.Scanner;该行语句放在类class上面。package下面
2、创建数据录入对象:Scanner sc = new Scanner(System.in)
3、调用方法获取键盘输入的数据:两种方法:
int x = sc.nextInt():从键盘获取一个int类型的数据;
注意事项:如果不小心输入了一个不是数字的数据,程序会报错:
java.util.InputMismatchException:输入不匹配异常
String s = sc.next():从键盘获取一个字符串。
二、流程控制语句:三种结构:顺序结构;选择结构;循环结构
顺序结构:没有特定的语法结构,按照代码的先后顺序依次执行。
选择结构:也被称为分支结构,执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
Java提供两种选择结构语句:if语句;switch语句
1、if语句:三种格式:
第一种格式:
if(关系表达式){
要执行的语句体;
}
注意:
1)、关系表达式中的结果只能是布尔类型的。
2)、若关系表达式中的结果为true,则执行语句体,若是false则不执行。
3)、语句体可以不止一条语句。
4)、if小括号后面可以直接跟分号,但此时if语句不会生效,等于一个空语句体
5)、大括号理论上可以省去,但是当语句体多的时候,不建议省去,因为省去之后面的代码无法执行,建议不管什么情况都不省括号。
第二种格式:
if(关系表达式){
语句体1;
}else{
语句体2
}
执行流程:1、判断关系表达式看其结果;2、如果关系表达式结果是true就执行语句体1,如果结果是flase就执行语句体2;3、语句体1和语句体2只会执行一个。
if语句第二种格式与三目运算符之间的转化:当if-else中没有输出语句时可以转化为三目运算符,否则不能;三目运算符转化为if语句时一定可以的,因为,没有输出语句。
class Demo{
public static void main(String[] args){
int a = 3;
int b = 4;
if(a==b){
System.out.println("a等于b");
}else{
System.out.println("a不等于b");
}
boolean res = (a==b)?true:false;
boolean res2 = false;
if(a==b){
res2 = true;
}else{
res2 = false;
}
System.out.println(res2);
boolean res3 = (a==b)?(res2=ture):(res2=false);
}
}
第三种格式:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}... ...
}else if(关系表达式n){
语句体n;
}else{
语句体n+1;
}
执行流程:
1)先判断关系表达式1,若结果是true,执行语句体1,执行完之后,结束if语句。
2)若关系表达式1结果为false,判断关系表达式2,若为true,执行语句体2,执行完结束if语句
3)若关系表达式2结果为false,判断关系表达式3,若为true,执行语句体3,执行完结束if语句
... ...
4)直到关系表达式n是false的时候,直接执行else中的内容,执行完毕之后结束if语句
注意事项:else语句不一定会执行,只有当前面所有的判断条件都是false的时候,最后才执行else;最后的else可以不写,但是若前面的条件都不满足就没有了默认情况的处理,代码不严谨;else if的个数取决于判断条件的个数
if语句的嵌套:
import java.util.Scanner;
class Demo2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数据:");
int a = sc.nextInt();
System.out.println("请输入第二个数据:");
int b = sc.nextInt();
System.out.println("请输入第三个数据:");
int c = sc.nextInt();
//if语句的嵌套实现
//先拿任意两个数进行比较
if(a>b){
//如果走到了这里说明a比b大
//然后拿a与c进行比较
if(a>c){
System.out.println("a,b,c中最大值为a:" + a);
}else {
System.out.println("a,b,c中最大值为c:" + c);
}
}else {
//如果走到了这里说明b比a大
//然后拿b与c进行比较
if(b>c){
System.out.println("a,b,c中最大值为b:" + b);
}else {
System.out.println("a,b,c中最大值为c:" + c);
}
}
2、switch语句:
switch语句定义格式:
switch(表达式){
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
。。。
case 常量值n:
语句体n;
break;
default:
语句体n+1;
break;
}
名词解释:switch:表示这是一个选择语句; 表达式:一定会有一个结果值,结果只可以是byte,short,int,char,JDK1.5之后可以是枚举,JDK1.7之后可以是String; case:switch中匹配的关键字; 常量值:被匹配的值,只能是常量值; 语句体:当匹配到对应的常量值之后,执行对应的语句体内容,可以不止一条;break:跳出(结束)switch 选择结构; default:当所有的case都不匹配的时候,默认执行的语句体
switch结构执行流程:
1、首先会计算表达式中的值
2、依次去匹配case中的常量值
3、当匹配到时,执行对应的语句体内容
4、如果所有的case都不匹配,最后再执行dafault中的语句体
5、如果遇到break或者执行代码结束switch选择
注意事项:
1、break可以不写吗?答:可以,但是会发生case“穿透”。
2、defaul可以不写吗?答:可以,但不建议,因为不写代码不严谨。
什么情况下可以不写?答:当只有固定的几个值的时候可以不写。
3、default可以写在最前面吗?若可以,会发生什么情况?
答:可以。
1)、default的执行顺序与它在switch中的位置无关。
2)、当default的顺序与break省略同时出现的时候,出来的结果可能会和预想的结果不同。
4、多个case后面 的常量值不能一样。
查看程序执行流程的小技巧:在IDEA中左侧显示行数处选中需要查看的程序,右击选择debug
循环结构:
循环结构的组成:
初始化语句:对变量条件进行初始化
判断条件语句:判断什么时候进入循环
循环体语句:要执行循环的内容
控制条件语句:通过用于控制循环条件的变量,使得循环在合适的时候结束
循环结构分为for循环,while循环
for循环:
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
注意:初始化语句只执行一次;初始化语句可以省略,但当省略时要在for循环执行前定义好;判断条件语句可以省略,但省略时,for循环会一直执行,无法结束,形成死循环;控制条件语句可以省略不写,但是省略后初始化语句的值不会改变,同样会一直执行,形成死循环;
判断条件语句的结果为一个boolean类型;只有当循环体内容只有一句时,可以省略大括号,若不止一条循环体语句则不可省略大括号,否则for循环只对紧跟在for循环后的一条语句有效.
例题:
class Demo3 {
public static void main(String[] args) {
//定义一个变量接收和
int sum = 0;
//求1到10的和
for (int i = 1; i < 11; i++) {
sum = sum + i;
}
System.out.println("1-10的和为:" + sum);
}
}
while循环:
while(判断条件语句){ 扩展格式: while(判断条件语句){
循环体语句; 循环体语句;
} 控制条件语句;
}
while循环可以与for循环等价:打印五句你最棒
class Demo4{
public static void main(String[] args){
//使用for循环打印十句你最棒
for(int i=1;i<=5;i++){
System.out.println("你最棒");
}
//使用while循环打印十句你最棒
/*
初始化语句:int i=1;
判断条件语句:i<=5;
循环体语句:System.out.println("你最棒");
控制条件语句:i++;
*/
int i=1;
while(i<=5){
System.out.println("你最棒"):
i++;
}
}
while循环与for循环的区别:
1、两者之间虽然可以做等价转换,但在开发中遇到在一个范围内做循环的时候,优先使用for循环
2、当循环的次数未知时,优先使用while循环
作用域带来的区别:
3、for循环结束后,初始化语句的变量在循环外无法访问,这意味着当你在同一个类中定义两个for循环时,初始化语句的变量可以相同
4、但while循环结束后,初始化语句的变量可以在外部继续使用
for循环与while循环简单举例:
class Demo5{
public static void main(String[] args){
// 使用for循环输出一至十的积
int sum = 1;
for(int i = 1;i<=10;i++){
sum = sum * i;
}
System.out.println(sum);
// 使用while循环输出一至十的积以及循环次数
int sum2 = 1;
int i = 1;//上面for循环中的初始化语句不会影响该定义
while(i<=10){
sum2 = sum2 *i;
i++;
}
System.out.println(sum2);
System.out.println(i);
}
}
while循环的第二种格式:do-while循环
基本格式:do{ 扩展格式:do{
循环体语句; 循环体语句;
}while(判断条件语句); 控制条件语句;
}while(判断条件语句)
while与do-while的区别:
while循环先进行判断条件,看是否是true,若是true,再执行循环体内容。
而do-while循环是先执行一次循环体内容,然后再去判断条件,看是否为true,若是true,则继续执行。
循环嵌套:
举例说明循环嵌套:打印3行4列的星星符号*
步骤:先打印一行四列的星星*,想使多个输出语句在同一行,需要使用Java的另一种输出方式:
System.out.print();输出不换行,此时再打印一行四列的星星
打印完之后,需要打印三行像这样的星星,因此在原来for循环基础上加上一个for循环形成循环嵌套,成功打印三行四列的星星,部分完整代码如下:
for(int j=1;ji<=4;j++){
//打印一行四列的星星
System.out.print("*\t");
}
//打印三行四列的星星
for(int i = 1;i<=3;i++){//此for循环控制行
for(int j = 1;j<=4;j++){//此for循环控制列
System.out.print("*\t");
}
System.out.println();
}
控制条件语句:Java提供三个关键字用于在需要在中途退出或者停止循环。
break:使用场景:用于switch语句中,在循环语句中,离开使用场景的存在无意义。
注意事项:break在单独的一个if语句中不可使用,但若是if语句外含有嵌套语句(如一个for循环内嵌套了一个if语句),则可以使用;单独的使用break无意义,也不允许使用。
for(int i = 1;i<11;i++){
System.out.println(i);
if(i==3){
break;//该break的作用是结束整个循环
}
}
/*
因此输出为:
1
2
*/
break在循环嵌套结构中单独使用时结束的是离它最近的那个循环,只会跳出(结束)单层循环。如果想要使break结束最外层(多层)循环,需要使用带标签的break。
//为外部循环与内部循环分别加上标签wc与nc
wc:for (int i = 1; i <= 9; i++) {
nc:for (int j = 1; j <= i; j++) {
if(j==4){
break wc; //单独使用的时候,结束的是离它最近的那个循环,就是跳出单层循环
}
System.out.print(i + "*" + j + "=" + (i * j) + "\t");
}
System.out.println();
//该语句输出为九九乘法表的第一到第四行
结束最外部循环时,只需要在break后加上外部循环的标签即可结束外部循环,即结束整个循环。
continue:跳出当次循环,继续执行后面的循环,不可用于switch语句中
for(int i = 1;i<=5;i++){ //该输出为:
if(i==3){ //1
continue; //2
} //4
System.out.println(i); //5
}
输出中没有3,因为当i等于3时,执行continue跳出了该次循环。
return:结束main方法,结束程序执行,正常情况下,return在方法中使用
for(int i=1;i<=10;i++){
if(i==3){
return;
//结束main方法,结束程序执行,正常情况下,return在方法中使用,我们马上会说到
}
System.out.println(i);
}