Java从零开始 第4讲 Java中的输入,三种基本结构和逻辑运算
一个简单的输入
为了完成输入,需用引用Java中自带的Scanner方法,为了使用Scanner方法,我们需要在类的声明之前添加以下代码
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args){
System.out.println("Hello World!");
}
并且在使用scanner前,必须实例化该方法,通过如下代码实现
Scanner scanner = new Scanner(System.in);
在之后就可以使用scanner进行输入,代码如下
String str1 = scanner.next();
String str2 = scanner.nextLine();
int i = scanner.nextInt();
long j = scanner.nextLong();
double k = scanner.nextDouble();
float l = scanner.nextFloat();
short m = scanner.nextShort();
boolean n = scanner.nextBoolean();
Q:为什么别的类型都只有一种输入方法,String却有两个呢。
String的两种输入方法next和nextLine有一定区别,在next中接收的String不会存在空格,而且在接收到第一段数据后只要有空格存在,后面的数据都不会被接受。
(特别提示:next和nextLine最好不要同时使用,容易出现bug)
输入数据 | next接收数据 | nextLine接收数据 |
---|---|---|
abc | abc | abc |
空格 | 无法接收数据 | 空格 |
空格abc空格 | abc | 空格abc空格 |
空格abc空格efg | abc | 空格abc空格efg |
三种基本结构
顺序结构
所谓顺序结构,即为顺序运行,一行一行的运行,不跳过任何一行,正如我们之前所写的所有代码,都是顺序运行的。
分支结构
分支结构,即为在进入分支结构后,会根据情况选择是否进行分支结构里面的内容,可能全部执行,可能部分执行,也可能全部跳过,在这里我们将介绍两种主要的分支结构,if-else 和 switch-case
if-else结构
if-else结构是最经典的选择结构,其主要有四种形式
if(条件语句1){语句块1}
if(条件语句1){语句块1}else{语句块2}
if(条件语句1){语句块1}elseif(条件语句2){语句块2}
if(条件语句1){语句块1}elseif(条件语句2){语句块2}else{语句块2}
注意:if和else语句在一个if-else结构里只能有一个,而else if 语句则可以有无限个
我们来创造一个情景帮助理解一下if-else语句
小明是一个快乐的小学生,他口袋里面可能有一些硬币,但是他不伸手去摸,他也不知道自己有多少。小明回家路上经过了一家小卖部,他很想买一些吃的,小明最喜欢吃3块钱的薯片,但是如果没有三块钱,买一个一块钱的棒棒糖也不错,如果只有五毛,那就买一包辣条,现在让我们用if-else实现小明的想法。
小明.把手伸进口袋();
if(口袋里的钱 >= 3){
小明开心的买下一包薯片;
}
else if(口袋里的钱 >= 1){ //不用判断<3,前面已经判断过不大于3
小明愉快的买下一根棒棒糖;
}
else if(口袋里的钱 >= 0){
小明买了一包辣条;
}
else{ //即小明口袋里的钱<0
小明不开心回家了;
}
switch-case结构
switch-case结构也能实现分支的效果,主要为如下形式
switch(一个变量){
case 取值1:
语句块1;
break;
....
case 取值n:
语句块n;
break;
default:
语句块n+1;
break;
}
switch-case语句有一些规则:
- 选取的变量必须是int, byte, char, short, String之一
- case的取值必须是常量
- default语句和break语句可以不写(如果没有break将往下执行)
让我们同样用小明来举例,但是这次有一些不一样,小明突然更爱吃棒棒糖了,所以即使他能买一包薯片,他也想买棒棒糖,让我们用switch-case来实现小明的想法
int money = 小明的钱;
switch(money){
case 5:
case 4:
小明先买了一包薯片
case 3:
case 2:
case 1:
小明开心的买了一根棒棒糖;
break;
case 0:
小明不开心的回家了;
break;
}
在这一段代码中,小明手里无论有3,2,1块,都会选择购买棒棒糖,手里没钱的时候则是什么都买不了,而如果小明手里有4块或5块,则小明可以霸气的选择我全都要,先买薯片再买棒棒糖
循环结构
循环结构可以让一段代码反复的运行,而不用使用重复的代码,在这里我将介绍两种循环结构,for循环和while循环
for结构
for循环是最通用的循环,其语法比较复杂,让我们先学习语法再举例
for (初始化参数;判断条件;更新循环变量){
循环语句;
}
在for循坏的结构中,第一部分可以用于初始化参数,第二部分用于判断条件,决定是否继续循环,第三部分则是更新循环变量,在其中,只有判断条件是必须的,所以我们可以写出如下java结构
for(; i < 10;){循环语句}
//最简洁形式,只要i < 10,循环就会一直进行
for(int i = 1; i < 10;){循环语句}
//注意:此处定义的i只能在循环内部使用
for(int i = 1; i < 10; i++){循环语句}
//在每次循环语句执行完毕后,i++
让我们再次使用小明的例子,小明买了一包薯片准备吃,小明每次能吃一片薯片,假设他买到的薯片里面有30片,则小明吃薯片的过程能用如下代码实现
for (int 薯片数量 = 30; 薯片数量 > 0; 薯片数量--){
小明吃薯片;
}
在薯片吃完之前,小明会保持一次一片的速率吃薯片,薯片将会一片一片减少,直到被完全吃完结束循环。
while结构
while结构和for结构区别不大,功能也没有for循环强大,这里给出两种基础用法
while (循环条件){
循环语句;
}
do{
循环语句;
}while(循环条件)
break与continue
循环结构一般需要一个出口,在允许的情况下,最好在定义结构时就写出一个出口,但是我们也可以在执行语句中加入break或者continue来手动中止或暂停循环
其中break可以被用来跳出循环,而continue则被用来跳过之后的代码,让我们用for循环和小明来举个例子
//小明在上课时偷偷吃薯片
for (int 薯片数量 = 30; 薯片数量 > 0; 薯片数量--){
if(小明吃薯片被同桌看见了)
continue;
if(小明吃薯片被老师看见了)
break;
小明吃薯片;
}
小明吃薯片的时候,如果被同桌看见了,则小明拿起的这一片薯片就被同桌吃掉了,即后面的“小明吃薯片”语句会被跳过,而如果小明吃薯片被老师看见了,那么整包薯片都没了,小明再也吃不了这包薯片了。
逻辑运算
在本讲中,大量使用了判断语句(判断语句的特点是:结果为true或false,如3==4等同于false,4>3等同于true),如 小明口袋里的钱 > 3,和 薯片数量 > 0,在这一部分,我将详细的谈谈逻辑运算的问题
首先让我们来认识一下关系运算符和逻辑运算符,基础的关系运算符有 ==,>,<,<=,>=,!=,其中注意两点:
- 在逻辑运算中,必须使用两个等于号,即==
- !=为不等于号,3 != 4等同于true
再然后让我们认识一下逻辑运算符
运算符 | 中文名 | 运算方式 | 示例 |
---|---|---|---|
& | 与 | 同真才为真 | true&false = flase |
| | 或 | 同假才为假 | true|false =true |
^ | 异或 | 同号为假,异号为真 | true^false = true |
! | 非 | 反号 | !true = false |
&& | 短路与 | 同与 | |
|| | 短路或 | 同或 |
短路的意思是,在先判断左边条件后,如果能直接确定结果,则不会判断右边的条件,如果false && * = false,不会进一步判断右边的条件,在实战中可以用于减少代码时间复杂度。