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接收数据
abcabcabc
空格无法接收数据空格
空格abc空格abc空格abc空格
空格abc空格efgabc空格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,不会进一步判断右边的条件,在实战中可以用于减少代码时间复杂度。

转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值