程序流程控制
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
- 顺序结构
- 分支结构
- 循环结构
顺序结构
image.png分支语句 if-else
image.pngimage.png
注意:
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
- 语句块只有一条执行语句时,一对{}可以省略,但建议保留
- if-else语句结构,根据需要可以嵌套使用
- 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
- 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓,当多个条件是“包含”关系时,“小上大下 / 子上父下”
例题
编写程序
由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
import java.util.Scanner;
class Ifexam2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// if——else语句可以嵌套
System.out.println("Enter the first number please: ");
double num1 = scan.nextDouble();
System.out.println("Enter the second number please: ");
double num2 = scan.nextDouble();
System.out.println("Enter the third number please: ");
double num3 = scan.nextDouble();
// 按从小到大排序
// 插值法
if(num1 > num2){
if(num3 > num1){
System.out.println(num2 +","+ num1 +","+ num3);
}else if(num3 < num2){
System.out.println(num3 +","+ num2 +","+ num1);
}else{
System.out.println(num2 +","+ num3 +","+ num1);
}
}else{
if(num3 > num2){
System.out.println(num1 +","+ num2 +","+ num3);
}else if(num3 < num1){
System.out.println(num3 +","+ num1 +","+ num2);
}else{
System.out.println(num1 +","+ num3 +","+ num2);
}
}
}
}
博彩游戏
假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入
一个两位数,然后按照下面的规则判定用户是否能赢。
- 如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
- 如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。
- 如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。
- 如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
- 如果用户输入的数字没有匹配任何一个数字,则彩票作废。
import java.util.Scanner;
class Gambol {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = (int)(Math.random() * 90 + 10);
int num1 = num / 10;
int num2 = num % 10;
System.out.print("Enter your number please: ");
int mynum = scan.nextInt();
int mynum1 = mynum / 10;
int mynum2 = mynum % 10;
if(mynum == num){
System.out.println("you got 10000$ !!!");
}else if(mynum1 == num2 && mynum2 == num1){
System.out.println("you got 3000$!");
}else if(mynum1 == num1 || mynum2 == num2){
System.out.println("you got 1000$!");
}else if(mynum1 == num2 || mynum2 == num1){
System.out.println("you got 500$");
}else{
System.out.println("Sorry you got no prize..");
}
System.out.println("the real number is : " + num);
}
}
分支语句 switch-case
image.png举个例子
/*
switch--case 结构
注意:switch会按条件顺序比对执行,除非遇到break,否则会依次执行所有语句
*/
class SwitchTest{
public static void main(String[] args) {
int num = 2;
switch(num){
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
default:
System.out.println("...");
}
}
}
注意
- switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
- case子句中的值必须是常量,不能是变量名或不确定的表达式值;
- 同一个switch语句,所有case子句中的常量值互不相同;
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
- default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default
例题
根据用于指定月份,打印该月份所属的季节。
3,4,5 春季
6,7,8 夏季
9,10,11 秋季
12,1,2 冬季
import java.util.Scanner;
class Season {
public static void main(String[] args){
System.out.print("Please enter your month: ");
Scanner scan = new Scanner(System.in);
int month = scan.nextInt();
switch(month)
{
case 3:
case 4:
case 5:
System.out.println("Spring");
break;
case 6:
case 7:
case 8:
System.out.println("Summer");
break;
case 9:
case 10:
case 11:
System.out.println("Autumn");
break;
case 12:
case 1:
case 2:
System.out.println("Winter");
break;
}
}
}
编写程序
从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。
import java.util.Scanner;
class Noname2{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Enter the month please...");
int month = scan.nextInt();
System.out.print("Enter the date please...");
int date = scan.nextInt();
int day = 0;
switch(month)
{
case 12:
day += 30;
case 11:
day += 31;
case 10:
day += 30;
case 9:
day += 31;
case 8:
day += 31;
case 7:
day += 30;
case 6:
day += 31;
case 5:
day += 30;
case 4:
day += 31;
case 3:
day += 28;
case 2:
day += 31;
case 1:
day += 0;
}
day += date;
System.out.println("the number of day is: " + day);
}
}
循环语句 for
image.png例题
输出所有的水仙花数
所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。
例如: 153 = 111 + 333 + 555
class FlowerNumber {
public static void main(String[] args) {
for(int i = 100; i < 1000; i++){
/*
int num = 255;
System.out.println("这个数的是:" + num);
System.out.println("这个数的个位是:" + (num % 100 % 10));
System.out.println("这个数的十位是:" + (num % 100 / 10));
System.out.println("这个数的百位是:" + (num / 100));
*/
int i1 = i / 100;
int i2 = i % 100 / 10;
int i3 = i % 100 % 10;
if(i1 * i1 * i1 + i2 * i2 * i2 + i3 * i3 * i3 == i){
System.out.println(i);
}
}
}
}
编写程序
打印出九九乘法表与正、倒三角形
class nn99 {
public static void main(String[] args) {
// 九九乘法表
for (int i = 1 ;i <= 9 ;i++ ){
for(int j = 1; j <= i; j++){
System.out.print(j + " x " + i + " = " + (i * j));
System.out.print(" ");
}
System.out.print("\n");
};
System.out.println("");
System.out.println("");
System.out.println("");
// 正三角形
for (int i = 1 ;i <= 9 ;i++ ){
for(int j = 1; j <= i; j++){
System.out.print("★");
System.out.print(" ");
}
System.out.print("\n");
};
System.out.println("");
System.out.println("");
System.out.println("");
// 倒三角形
for (int i = 9 ;i >= 1 ;i-- ){
for(int j = 1; j <= i; j++){
System.out.print("★");
System.out.print(" ");
}
System.out.print("\n");
};
}
}
打印结果:
image.png
编写程序
输出一百以内的所有质数
方法一:
class PrimeNumber {
public static void main(String[] args) {
boolean flag = true;
for(int i = 2; i < 100; i++){
for(int j = 2; j < Math.sqrt(i); j++){
if(i % j == 0){
flag = false;
break;
}
}
if(flag == true){
System.out.println(i);
}
flag = true; // flag 必须要重置
}
}
}
方法二:
class PrimeNumber2 {
public static void main(String[] args) {
label:for(int i = 2; i < 100; i++){
for(int j = 2; j < Math.sqrt(i); j++){
if(i % j == 0){
continue label; // 跳出指定标签循环
}
}
System.out.println(i);
}
}
}
网友评论