Java学习笔记-流程控制
流程控制
Java流程控制01:用户交互Scanner
tip:java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。
基本语法:
Scanner scanner = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,再读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的依据。
package com.maynerd.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()){
// String str = scanner.next();
String str = scanner.nextLine();
System.out.println("输出的内容为:" + str);
}
//凡是属于IO流的量需要把它关闭,避免占用资源
scanner.close();
}
}
package com.maynerd.scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String str = scanner.nextLine();
System.out.println("输出的内容为:" + str);
scanner.close();
}
}
总结:主要讲了两种使用Scanner类的两种输入的用法。
Java流程控制02:Scanner进阶使用
tip:摁住ctrl点击大写的类Scanner进入类的源码查看。
使用scanner.hasNextInt()和scanner.hasNextFloat()的进阶用法,用来判断接收的数字,再用scanner.nextInt()和scanner.nextFloat()接收并输出,代码如下。
package com.maynerd.scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = 0;
float f = 0.0f;
System.out.println("请输入整数:");
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("整数数据" + i);
}else{
System.out.println("输入的不是整数数据");
}
System.out.println("请输入小数:");
if(scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("小数数据" + f);
}else{
System.out.println("输入的不是小数数据");
}
scanner.close();
}
}
输入多个数字,求他的总和和平均数,通过输入非数字结束输入并换行输出结果,代码如下。
package com.maynerd.scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//我们要输入多个数字,求他的总和和平均数,通过输入非数字结束输入并换行输出结果
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算输入了多少个数字
int m = 0;
//通过while循环判断是否还有输入,并在里面对每一次进行求和统计
while(scanner.hasNextDouble()){
double x = scanner.nextDouble();
m++;
sum += x;
}
System.out.println(m + "个数的和为:" + sum);
System.out.println(m + "个数的平均值为:" + (sum/m));
scanner.close();
}
}
Java流程控制03:顺序结构
- Java的基本结构就是顺序结构,除非特别指明,否则就是一句一句往下执行。
- 顺序结构是最简单的算法结构。
- 它是任何算法都离不开的一种结构。
Java流程控制04:if选择结构
if单选择结构、if双选择结构、if多选择结构、嵌套的if结构、switch多选择结构。
基本语法1:
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
判断字符串是否为“Hello”,代码如下。
package com.maynerd.struct;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个内容:");
String s = scanner.nextLine();
//equals:判断字符串是否相等
if(s.equals("Hello")){
System.out.println(s);
}
System.out.println("END");
scanner.close();
}
}
基本语法2:
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
判断考试分数,多于60就是及格,小于60就是不及格。
package com.maynerd.struct;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
//考试分数60就是及格,小于60分就不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
int score = scanner.nextInt();
if(score >= 60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
scanner.close();
}
}
基本语法3:
if(布尔表达式1){
//如果布尔表达式1的值为true
}else if(布尔表达式1){
//如果布尔表达式2的值为true
}else if(布尔表达式2){
//如果布尔表达式2的值为true
}else if(布尔表达式3){
//如果布尔表达式3的值为true
}else{
//如果以上表达式都不为true执行该代码
}
判断考试分数,并且分级,代码如下。
package com.maynerd.struct;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
int score = scanner.nextInt();
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 >= 50){
System.out.println("不及格!");
}else{
System.out.println("成绩不合法!");
}
scanner.close();
}
}
基本语法3:
if(布尔表达式1){
//如果布尔表达式1的值为true执行代码
if(布尔表达式 2){
//如果布尔表达式2的值为true执行代码
}
}
思考:用if的嵌套结构实现1~100查找某个数。
Java流程控制05:Switch选择结构
tip:switch语句的变量类型可以是:
byte、short、int或者char。
在Java7(Java SE 7)中引入新特性:判断的变量可以是String类型,同时case标签必须为字符串常量或字面量。
多选择结构还有一种实现方式就是switch case语句。
switch case 语句判断一个变量和一系列值中某个值是否相等,每个值称为一个分支。
基础语法:
switch(expression){
case value :
//语句
break;//可选
case value :
//语句
break;//可选
//任意数量的case语句
default ://可选
//语句
}
代码如下:
package com.maynerd.struct;
public class SwitchDemo {
public static void main(String[] args) {
String name = "小白";
switch(name){
case "小红":
System.out.println("小红");
break;
case "小白":
System.out.println("小白");
break;
default:
System.out.println("都不是!");
}
}
}
tip:反编译 java——class(字节码文件)——-反编译(IDEA),查看源码。
IDEA项目结构→项目→输出路径→文件资源管理器打开这个路径→项目输出位置找到production目录→在找到对应下级位置,找到对应.class结尾的文件,如图。
右键用文本打开将会是乱码,所以我们是用IDEA反编译,用IDEA打开,把文件拷贝到打开的IDEA中.java所在目录中,即可查看。
Java流程控制06:While循环详解
- while循环
- do-while循环
- for循环
基本语法:
while(布尔表达式){
//循环内容
}
只要布尔表达式为true,循环就会一直执行下去。
我们大多数情况是会让循环停止下来的,我们需要一个让那个表达式失效的方式来结束循环。
少部分情况需要一直循环执行比如服务器的请求响应监听等。
循环条件一直未true会造成无限循环,我们正常业务中应该避免这种情况造成程序卡死崩溃。
思考:计算1加到100。
Java流程控制07:DoWhile循环
基本语法:
do{
//代码语句
}while(布尔表达式);
while和dowhile的区别:
- while先判断后执行,dowhile是先执行后判断。
- dowhile总是会保证循环体会被至少执行一次!这是主要差别。
思考:用while和dowhile计算1加到100。
Java流程控制08:For循环详解
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。
tip:快捷键,输入100.for 回车自动生成一个for循环语句。
基本语法:
for(初始化;布尔表达式;更新){
//代码语句
}
package com.maynerd.struct;
public class ForDemo01 {
public static void main(String[] args) {
int a = 1;//初始化条件
while(a <= 100){//条件判断
System.out.println(a);//循环体
a+=2;//迭代
}
System.out.println("while循环结束!");
//初始化 条件判断 迭代
for (int i = 1; i < 100; i++) {
System.out.println(i);
}
System.out.println("for循环结束!");
}
}
思考1:计算0-100之间所有奇数和偶数的和。
package com.maynerd.struct;
public class ForDemo02 {
public static void main(String[] args) {
//思考1:计算0-100之间的技术和偶数的和
int oddSum = 0;
int evenSum = 0;
for (int i = 0; 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个。
package com.maynerd.struct;
public class ForDemo03 {
public static void main(String[] args) {
//用while和for循环输出1-100之间呗5整除的数,并且每行输出3个。
for (int i = 1; i <= 1000; i++) {
if(i % 5 == 0){
System.out.print(i + "\t");
}
if(i % 15 == 0){//每行
System.out.println();
}
}
}
}
Java流程控制09:打印九九乘法表
思考3:打印九九乘法表。
package com.maynerd.struct;
public class ForDemo05 {
public static void main(String[] args) {
//打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + (i*j) + "\t");
}
System.out.println();
}
}
}
Java流程控制10:增强For循环
tip:在Java5中引入一种主要用于数组或集合的增强for循环。
Main方法上面括号就是一个数组
基础语法:
for(声明语句 : 表达式){
//代码句子
}
代码如下:
package com.maynerd.struct;
public class ForDemo06 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50};//定义了一个数组
for (int i = 0; i < 5; i++) {
System.out.println(numbers[i]);
}
System.out.println("========================");
//遍历数组元素
for (int number : numbers) {
System.out.println(number);
}
}
}
Java流程控制11:break、continue、goto
brea在任何循环语句的主题部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break也可以在switch语句中使用)
continue语句用在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
关于goto关键字:
goto关键字很早就在程序设计语言中出现。尽管goto是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子...带标签的break和continue。
“标签”是指后面跟一个冒号的标识符,例如:label;
对Java来说唯一用到标签的地方是在循环语句之前。而在循环语句之前设置的标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用他们,他们就会中断到存在标签的地方。
打印101-150之间所有的质数,代码如下。
package com.maynerd.struct;
public class LabelDemo {
public static void main(String[] args) {
//打印101-150之间所有的质数
int count = 0;
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 + "\t");
}
}
}
Java流程控制12:打印三角形及Debug
五行的三角形,代码如下。
package com.maynerd.struct;
public class ForDemo04 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 5; j > i; j--) {
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
for (int j = 0; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
Debug需要标记断点,再开启Debug模式,最后在console控制台一步一步往下执行,主窗口会标识每一行的变量值的变化。