文章目录
用户交互scanner
Scanner的基本知识
定义
Scanner扫描器,可以通过Scanner类扫描用户在控制台输入的数据
基本语法
Scanner sc = new Scanner(System.in);
Scanner获取控制台输入的字符串
方法一:next()方法
实例
package com.lan.scanner;
import java.util.Scanner;//使用该类时要进行导包
public class Demo01 {
public static void main(String[] args) {
//用户交互scanner
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方法接收:");
if(scanner.hasNext()) {
//程序在此处会等待用户输入
String str = scanner.next();//当控制台输入的字符串是hello world时
System.out.println("您输入的字符串是:"+str);//您输入的字符串是:hello
}
//凡是IO流的类在使用完毕后要关闭以节省资源,如果不关闭会一直占用资源
scanner.close();
}
}
总结
- 通常使用hasNext()方法判断控制台是否有输入
- 对于输入的有效字符之前遇到的空白字符,next()方法会将空白字符过滤掉
- 只有当读取到有效字符之后,其后面的空白字符才会被认为是分隔符或者结束符
- next()不能得到带有空格的字符串
方法二:nextLine()方法
实例
package com.lan.scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//创建scanner对象
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判断是否有字符串的输入
if(scanner.hasNextLine()) {
String str = scanner.nextLine();//当控制台输入的字符串是hello world时
System.out.println("您输入的字符串是:"+str);//您输入的字符串是:hello world
}
//要养成良好的习惯,记得关闭资源
scanner.close();
}
}
总结
- 通常使用hasNextLine()方法判断控制台是否有输入
- 以回车键作为结束符,可以获得带有空格的字符串
Scanner获取控制台其他类型数据
除了获取字符串外,Scanner也有相对应的方法以及has方法获取其他类型的数据和判断控制台是否有数据输入,下面以int型和float型数据为例,格式基本与字符串一致。
例如
package com.lan.scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//通过Scanner获取整形数据
Scanner scanner = new Scanner(System.in);
//提示用户输入整数数据
System.out.println("请输入一个整数数据:");
if (scanner.hasNextInt()) {//判断用户是否输入数据
int i = scanner.nextInt();//定义一个变量用于接收数据
System.out.println("您输入的整数数据是:"+i);
} else {
System.out.println("您输入的不是整数数据!");
}
//提示用户输入小数数据
System.out.println("请输入一个小数数据:");
if (scanner.hasNextFloat()) {//判断用户是否输入数据,此判断有时也可省略,常用于循环中
float f = scanner.nextFloat();//定义一个变量用于接收数据
System.out.println("您输入的小数数据是:"+f);
} else {
System.out.println("您输入的不是小数数据!");
}
scanner.close();
}
}
顺序结构
Java最基本的结构就是顺序结构,除非特别声明,否则就从上到下依次执行。
顺序结构是最简单的算法结构。
顺序结构是任何代码块都无法离开的最基本的算法结构。
选择结构
if单选择结构基本语法
if(布尔表达式) {
//条件为真,即布尔表达式的值是true时,执行的代码
}
实例
package com.lan.structure;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您想输入的内容");
String str = scanner.nextLine();
if (str.equals("hello")) {
System.out.println("您输入的内容是hello");
}
System.out.println("ending");
scanner.close();
}
}
if双选择结构基本语法
if(布尔表达式) {
//条件为真,即布尔表达式的值是true时,执行的代码
} else {
//条件为假,即布尔表达式的值是false时,执行的代码
}
实例
package com.lan.structure;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的成绩:");
double score = scanner.nextDouble();
if (score >= 60) {
System.out.println("恭喜您的成绩达标!");
} else {
System.out.println("很遗憾您的成绩不达标!");
}
scanner.close();
}
}
if多选择结构基本语法
if(布尔表达式1) {
//如果布尔表达式1的值是true,执行的代码
} else if(布尔表达式2) {
//如果布尔表达式2的值是true,执行的代码
} else if(布尔表达式3) {
//如果布尔表达式3的值是true,执行的代码
} else {
//以上布尔表达式的值均为false时,执行的代码
}
实例
package com.lan.structure;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的成绩");
double score = scanner.nextDouble();
if (score == 100) {
System.out.println("恭喜满分");
}else if (score>=90 && score<100) {
System.out.println("A级");
}else if (score>=80 && score<90) {
System.out.println("B级");
}else if (score>=70 && score<80) {
System.out.println("C级");
}else if (score>=60 && score<70) {
System.out.println("D级");
}else if (score<60 && score>=0) {
System.out.println("很遗憾不及格");
}else {
System.out.println("您输入的成绩不符合要求");
}
scanner.close();
}
}
嵌套的if语句
if(布尔表达式1) {
//如果布尔表达式1的值是true,执行的代码
if(布尔表达式2) {
//如果布尔表达式2的值是true,执行的代码
}
}
实例
package com.lan.structure;
import java.util.Random;
import java.util.Scanner;
public class IfDemo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random r = new Random();
//猜数字,1-10之间的随机数字
int num = r.nextInt(10);//产生随机数
int guess = num+1;
System.out.println("请输入你猜的数字");
int i = scanner.nextInt();
if (i==guess) {
System.out.println("恭喜您猜对了");
} else {
if (guess>i) {
System.out.println("猜小了");
} else {
System.out.println("猜大了");
}
}
//输出电脑产生的随机数
System.out.println(guess);
scanner.close();
}
}
switch多选择结构
switch(expression) {
//break没有写会产生case穿透现象
case value:
//语句
break;//可选
case value:
//语句
break;//可选
//可以有任意数量的case语句
default://可选
//语句
}
switch语句中的变量类型可以是
byte, short, int, char
从JavaSE7开始,也支持字符串类型
同时case标签必须是字符串常量或字面量
实例1
package com.lan.structure;
public class SwitchDemo01 {
public static void main(String[] args) {
char c = 'A';
//不加break会产生case穿透现象
switch (c) {
case 'A':
System.out.println("A");
break;
case 'B':
System.out.println("B");
break;
case 'C':
System.out.println("C");
break;
default:
System.out.println("D");
}
}
}
实例2
package com.lan.structure;
public class SwitchDemo02 {
public static void main(String[] args) {
String s = "lan";
switch (s) {
case "lan":
System.out.println("lan");
break;
case "man":
System.out.println("man");
break;
default:
System.out.println("wu");
}
}
}
循环结构
while循环
语法
while(循环的条件) {
//条件满足执行的代码
}
//避免死循环,要有让循环停下来的语句
//如果不满足循环的条件,根本不会进入循环,即不会执行条件满足执行的代码
实例
package com.lan.structure;
public class WhileDemo01 {
public static void main(String[] args) {
//计算1-100的和
int i = 1;
int sum = 0;
while (i<=100) {
sum += i;
i++;
}
System.out.println("1-100的和是:" + sum);
}
}
do…while循环
语法
do {
//代码语句
} while(循环的条件);
//do...while和while循环类似,不同点是,do..while先执行do代码块中的代码,再判断循环条件是否满足,即do...while至少会循环一次
//while是先判断后循环,do...while是先循环后判断
实例
package com.lan.structure;
public class DoWhileDemo01 {
public static void main(String[] args) {
//计算1-100的和
int i = 1;
int sum = 0;
do {
sum += i;
i++;
} while (i<=100);
System.out.println("1-100的和是:"+sum);
}
}
for循环
语法
for(初始化;循环的条件;更新) {
//循环条件满足的代码
}
//死循环
for(;;) {
//代码
}
实例1:计算1-100的奇数和及偶数和
package com.lan.structure;
//计算1-100的奇数和及偶数和
public class ForDemo01 {
public static void main(String[] args) {
int evenSum = 0;
int oddSum = 0;
for (int i = 1;i<=100;i++) {
if (i%2==0) {
evenSum += i;
} else {
oddSum += i;
}
}
System.out.println("偶数和:"+ evenSum);
System.out.println("奇数和:"+ oddSum);
}
}
实例2:用while循环或者for循环输出1-1000中能被5整除的数,每三个一行输出
package com.lan.structure;
//用while循环或者for循环输出1-1000中能被5整除的数,每三个一行输出
public class ForDemo02 {
public static void main(String[] args) {
//用while循环
int i = 1;
int count = 0;
while (i<=1000){
if (i%5==0) {
System.out.print(i + " ");//可以+"\t"
count++;
if (count==3) {//直接用i进行判断也可以
System.out.println();
count = 0;
}
}
i++;
}
System.out.println();
System.out.println("**********************");
//用for循环
int count1 = 0;
for (int j = 1;j<=1000;j++) {
if (j%5==0) {
System.out.print(j+" ");
count1++;
if (count1==3) {
System.out.println();
count1 = 0;
}
}
}
System.out.println();
System.out.println("**********************");
//对上述算法的改进
int count2 = 0;
for (int k=1;k<=1000/5;k++) {
System.out.print(k*5 + " ");
count2++;
if (count2==3) {
System.out.println();
count2=0;
}
}
}
}
实例3:打印九九乘法表
package com.lan.structure;
//打印九九乘法表
public class ForDemo03 {
public static void main(String[] args) {
for (int i = 1;i<=9;i++) {
for (int j = 1;j<=i;j++){
System.out.print(j + "*" + i + "=" + i*j + " ");
}
System.out.println();
}
}
}
增加for循环
此处先做个了解,等数组的时候再深入学习
Java5之后引入了增强for循环
语法
for(声明语句:表达式) {
//循环执行代码
}
//声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素相等
//表达式:表达式是要访问的数组名,或者是返回值为数组的方法
break和continue
定义和区别
break:可以用在循环结构中,用于强行退出循环,不再执行循环中的语句,即不再判断循环条件是否满足,break也用在switch选择结构中。
continue:用在循环语句体中,用于终止某次循环,即跳过循环体中剩余部分代码,接着进行下一次的循环判断。
label标签(了解)
常用于嵌套循环中。
举例
package com.lan.structure;
public class LabelDemo {
//打印101-150的质数
public static void main(String[] args) {
outer:for (int i = 101;i<=150;i++) {
for (int j = 2;j < i/2;j++) {
if (i%j == 0) {
continue outer;
}
}
System.out.print(i + " ");
}
}
}