Java流程控制——the next day
Next和NextLine
Java5的新特性,带来了java.util.Scanner类,提供了人机交互的作用。我们可以通过它获取用户的输入。
public class Demo2 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);//创建一个扫描器对象,用于接收键盘数据
s.next();//获取数据
s.nextLine();//获取多行数据
s.hasNext();//判断还是否有下一个数据
s.hasNextLine();//判断还是否有下一行数据
}
}
-
next():
-
一定要读取到字符才能结束输入。(才能使程序继续运行)
-
不会记录空白,并且以空格为结束符。
-
不能得到带有空格的字符串。
-
-
nextLine():
-
以Enter为结束符。
-
可以获得空白。
-
Scanner的获取类型
Scanner类提供了多种方法,支持获取不同数据类型的数据。
例如:
Scanner s = new Scanner(System.in);
int a = s.nextInt();//获取一个int类型,如果不是int型则弹出错误
s.hasNextInt();//判断输入的是否为int类型,返回布尔数值。
System.out.println(a);
s.close();
练习:输入多个数字,求其总和与平均值;每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果。
public class Demo02_practice {
//练习:输入多个数字,求其总和与平均值;每输入一个数字用回车确认,
// 通过输入非数字来结束输入并输出执行结果。
public static void main(String[] args) {
//创建扫描器
Scanner scanner = new Scanner(System.in);
//创建接收变量,double类型记得要加上L,不然会出现数据错误问题
double sum = 0L;
int count=0;
//判断是否还有double数值输入,非double则跳出循环
while (scanner.hasNextDouble()){
sum += scanner.nextDouble();
count++;
}
System.out.println("总数为:"+sum);
System.out.println("平均数为:"+sum/count);
//回收扫描器
scanner.close();
}
}
顺序结构
字面意思,除了特殊情况外,代码都是一行一行的执行,就像写字一样,一行一行写。
选择结构(IF语句)
单选择结构
小练习:判断输入的数值是否为hello
-
.equals 方法和 str=="hello" 的区别在于:
-
.equals 方法是对比数值是否相同;
-
str=="hello"是对比两个变量之间的内存地址块是否是同一块。
-
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(str);
}
System.out.println("输入的值不是hello");
scanner.close();
}
}
双选择结构
小练习:考试分数大于等于60就是几个,小于60就不及格
public class IFDemo2 {
public static void main(String[] args) {
//考试分数大于等于60就是几个,小于60就不及格
//解决方案A
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
scanner.close();
if (score>=60){
System.out.println("及格");
}else {
System.out.println("不及格");
}
//解决方案B:三元运算符
String str = score>=60?"及格":"不及格";
System.out.println(str);
}
}
多选择结构
小练习:考试分数大于等于60就是几个,小于60就不及格,并且对及格成绩每10分进行定级,满分则显示满分。超出分值范围应当显示不合法。
public class IFDemo03 {
public static void main(String[] args) {
//考试分数大于等于60就是几个,小于60就不及格
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
scanner.close();
if (score == 100){
System.out.println("满分");
}else if (score<100 && score>=90){
System.out.println("A级");
}else if (score<90 && score>=80){
System.out.println("B级");
}else if (score<80 && score>=70){
System.out.println("C级");
}else if (score<70 && score>=60){
System.out.println("D级");
}else if (score<60 && score>=0){
System.out.println("不及格");
}else {
System.out.println("成绩不合法");
}
}
}
嵌套结构
小练习:输入一个数1~100,猜出这个数值是多少?
小提示:采用二分查找法。
switch多选择结构
-
case
-
穿透关键词,可以根据switch上的变量,对比case后的数值,相同则执行case下的语句。
-
-
break
-
中断语句,跳出循环或当前代码块。
-
拓展:反编译
通常我们Java文件在运行时,都需要编译为.class 文件才能执行。
IDEA 程序为我们提供了反编译的功能。将.class文件拖入IDEA程序中,即会自动进行反编译。
实际上我们看到的switch语句,是通过编写为这种方式,进行运行的。
循环结构
while循环
小练习:计算1+2....+100
public class whileDemo1 {
public static void main(String[] args) {
int i=1;
int sum=0;
while (i<=100){
sum+=i;
i++;
}
System.out.println(sum);
}
}
do……while循环
小练习:计算1+2....+100,观察do..while 和whlie的区别
public class WhileDemo02 {
public static void main(String[] args) {
int i=1;
int sum=0;
do{
sum+=i;
i++;
} while (i<=100);
System.out.println(sum);
}
}
for循环(经常使用,十分重要)
是最有效,最灵活的循环结构。
关于for循环有以下几点说明:
-
最先执行初始化步骤。
-
可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
-
之后,检测布尔值,如果是true则运行循环。false则循环终止。
-
执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
//FOR语句的死循环写法
for(;;){
}
//FOR语句的是三个部分都可以是空语句。
练习1:计算0到100之间的奇数和偶数的和
public class ForDemo01 {
public static void main(String[] args) {
int oddSum = 0;
int evenSum = 0;
//快捷键100.for
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
oddSum += i;
} else {
evenSum += i;
}
}
System.out.println("奇数和为:" + oddSum);
System.out.println("偶数和为:" + evenSum);
}
}
练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
public class ForDemo02 {
public static void main(String[] args) {
int j = 0;
for (int i = 1; i <= 1000; i++) {
if (i % 5 == 0) {
System.out.print(i + "\t");
j++;
if (j % 3 == 0 && j != 0) {
System.out.println();
}
}
}
}
}
练习3:打印九九乘法表
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)+"\t");
}
System.out.println();
}
}
}
增强型for循环
public class ForDemo04 {
public static void main(String[] args) {
//定义数组的两种方式:不初始化,但是指定数组范围;
int[] number=new int[5];
//初始化数组
int[] number2={12,213,31,1213,14,5,54,23};
for (int i : number2) {//遍历数组
System.out.println(i);
}
}
}
break & continue
简而言之:
-
break:跳出循环体;
-
continue:跳过单次循环;
-
功能2:跳到指定标签的循环体如下;(不建议使用)
-
outer:for (int i = 11; i < 15; i++) {
for (int j = 2; j < i / 2; j++) {
if (i % j == 0) {
continue outer;
}
}
}
练习
题目:输入一个数值,根据这个数值打印一个等边三角形
代码:
public class TestDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {
int n = scanner.nextInt();
for (int j = n; j > 0; j--) {
for (int i = j; i > 0; i--) {
System.out.print(" ");
}
for (int i = 0; i < (n - j) * 2 + 1; i++) {
System.out.print("*");
}
System.out.println();
}
} else {
System.out.println("输入信息有误,请输入整数");
}
//解题思路
//当N=5时,要输出1个*;以此类推得出如下思路;最后总结公式:(n-j)*2+1;可以解这个公式
// 5---1
// 4---3
// 3---5
// 2---7
// 1---9
}
}
输出如下:
这种类型的算法题,对加深JavaSE代码的理解非常有帮助;有能力的小伙伴可以进阶的研究一下贪心算法中的背包问题。是一到经典的动态规划类型题目。
### 部分截图取自,B站UP:遇见狂神说;菜鸟教程
热门相关:倾心之恋:总裁的妻子 重生当学神,又又又考第一了! 法医娇宠,扑倒傲娇王爷 朕是红颜祸水 淫乱住宅2 奴隶契约