Java流程控制
Posted wangyiwen-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java流程控制相关的知识,希望对你有一定的参考价值。
Java流程控制
java.util.Scanner 是Java5的新特性,可以通过Scanner类来获取用户的输入
import java.util.Scanner;
?
public class Demo1 {
public static void main(String[] args) {
//创建一个扫描器对象,用来接收键盘数据
Scanner scan = new Scanner(System.in);
// next方式接收字符串
System.out.println("next方式接收:");
// 判断是否还有输入
if (scan.hasNext()) {
String str1 = scan.next();
System.out.println("输入的数据为:" + str1);
}
//凡是属于IO流的类用完都得关闭,不然会一直占用资源
scan.close();
}
}
next() 与 nextLine() 区别
next():
-
1、一定要读取到有效字符后才可以结束输入。
-
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
-
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
-
next() 不能得到带有空格的字符串。
nextLine():
-
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
-
2、可以获得空白
如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
int i = 0;
float f = 0.0f;
System.out.print("输入整数:");
if (scan.hasNextInt()) {
// 判断输入的是否是整数
i = scan.nextInt();
// 接收整数
System.out.println("整数数据:" + i);
} else {
// 输入错误的信息
System.out.println("输入的不是整数!");
}
System.out.print("输入小数:");
if (scan.hasNextFloat()) {
// 判断输入的是否是小数
f = scan.nextFloat();
// 接收小数
System.out.println("小数数据:" + f);
} else {
// 输入错误的信息
System.out.println("输入的不是小数!");
}
scan.close();
}
}
以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:
import java.util.Scanner;
class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double sum = 0;
int m = 0;
while (scan.hasNextDouble()) {
double x = scan.nextDouble();
m = m + 1;
sum = sum + x;
}
System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数的平均值是" + (sum / m));
scan.close();
}
}
2、顺序结构
Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
顺序结构是最简单的算法结构。
语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本语法结构。
3、选择结构
if单选择结构
-
我们需要去判断一个东西是否可行,然后我们才会去执行,这样的一个过程在程序中用if语句来表示
-
语法:
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}
if双选择结构
-
如果需要判断考试分数是否及格,大于等于60分及格,否则就不及格,这样我们需要一个双选择结构,if-else
-
语法:
if(布尔表达式){
//如果布尔表达式为true将执行的语句
}else{
//如果布尔表达式为false将执行的语句
}
if多选择结构
-
生活中有时候需要判断的情况很多,不仅仅只有两个,那么我们就需要用一个多选择结构来处理if-else if-else
-
语法:
if(布尔表达式1){
//如果布尔表达式1为true将执行的语句
}else if(布尔表达式2){
//如果布尔表达式2为true将执行的语句
}else if(布尔表达式3){
//如果布尔表达式3为true将执行的语句
}else{
//如果以上都不是true将执行的语句
}
嵌套的if结构
-
使用嵌套的if...else语句是合法的。也就是在另一个if或者else if语句中使用if或者else if 语句。可以像if语句一样嵌套else if ...else
-
语句:
if(布尔表达式1){
//如果布尔表达式1为true将执行的语句
if(布尔表达式2){
//如果布尔表达式2为true将执行的语句
}
}
switch多选择结构
-
多选择结构还有一个实现方式switch case 语句
-
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
-
switch 语句中的变量类型可以是:
-
byte、short、int、或者char
-
从Java SE7开始
-
switch 支持字符串 String类型
-
同时 case 标签必须为字符串常量或字面量
-
4、循环结构
while 循环
最基本的循环,结构为:
while(布尔表达式){
//循环内容
}
只要布尔表达式为true,循环就会一直执行下去;
为了让循环能够停下来,我们需要一个让表达式不成立的方式结束循环;
如果循环条件一直为true就会造成死循环
do...while 循环
对于while语言而言,如果不满足条件,则不能进入循环。但有时候需要即便不满足条件的时候也要至少执行一次。
do{
//代码块
}while(布尔表达式);
while 和 do-while的区别:
-
while先判断后执行;do-while 先执行后判断
-
do-while总是保证循环体会被至少执行一次。
for 循环
虽然所有的循环结构都可以用while或者do-while表示,但是Java提供了另一种语句——for循环,使一些循环结构变得更加简单。
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。
语法:
for(初始化; 布尔表达式; 更新) {
//代码语句
}
在Java5中引入了一种主要用于数组的增强型for循环
增强for循环语法
for(声明语句 : 表达式){
//代码语句
}
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
-
表达式:表达式要访问的数组名,或者返回值为数组的方法
public class Demo6 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50};
//for循环遍历输出
for (int i = 0;i<numbers.length;i++){
System.out.println(numbers[i]);
}
System.out.println("===================");
//增强for循环
for (int x : numbers){
System.out.println(x);
}
}
}
5、break&continue
-
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(也可用在switch语句中使用)
-
continue 语句用在循环语句体中,用于终止某次循环过程,即跳出循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
goto关键字
-
goto关键字很早在程序设计语言中出现,尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto,然而,break和continue这两个关键字的身上,我们仍然能看出一些goto的影子--带标签的break和continue。
-
"标签"是指后面跟一个冒号的标识符,例如:label:
-
对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,他们就会中断到存在标签的地方。
6、练习
public class Demo5 {
public static void main(String[] args) {
/*计算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("100以内奇数的和为:" + oddSum);
System.out.println("100以内偶数的和为:" + evenSum);*/
/* for循环输出1-1000之间被5整除的数,每行输出3个
for(int i = 1;i <= 1000;i++) {
if (i % 5 == 0) {
System.out.print(i + " ");
}
if (i % (5*3) == 0){
System.out.println();
}
}*/
/* while循环输出1-1000之间被5整除的数,每行输出3个
int i = 1;
while(i <= 1000){
if (i % 5 == 0){
System.out.print(i + " ");
}
if (i % (5*3) == 0){
System.out.println();
}
i++;
}*/
/* 九九乘法表
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 (int i = 0;i < 4;i++){
if (i % 2 ==0) {
for (int j = 0; j < 9; j++) {
if (j == 2 || j == 6) {
System.out.print("*");
} else {
System.out.print("-");
}
}
}else if (i == 1){
for (int k = 0;k < 9;k++){
if (k == 1 || k == 4 || k == 7) {
System.out.print("*");
} else {
System.out.print("-");
}
}
}else{
for (int l = 1;l <= 9;l++){
if (l == 5){
System.out.print("*");
}else{
System.out.print("-");
}
}
}
System.out.println();
}*/
/*交叉图形
for (int i = 0;i < 10;i++){
for (int j = 0;j < 10;j++){
if (j == i||j == 10-i-1){
System.out.print("&");
}else {
System.out.print("-");
}
}
System.out.println();
}*/
/* for循环输出打印三角形
for (int i = 1;i <= 5;i++){
for (int j = 9;j >= 1;j--){
if (j > (5 - 1 + i)){
System.out.print(" ");
}else if (j < (5 + 1 - i)){
System.out.print(" ");
}
else{
System.out.print("*");
}
}
System.out.println();
}*/
/* for循环输出打印三角形
for (int i = 1;i <= 5;i++){
for (int j = 5;j >= i;j--){
System.out.print(" ");
}
for (int j = 1;j <= i;j++){
System.out.print("*");
}
for (int j = 1;j < i;j++){
System.out.print("*");
}
System.out.println();
}*/
}
}
以上是关于Java流程控制的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程