程序控制结构
顺序控制
程序语句从上到下的执行顺序。(变量必须先定义再使用)
分支控制(if-else)
1、单分支
if(age >=18){
System.out.println("成年人需要为自己的行为负责!");
}
else
{
System.out.println("遵纪守法!");
}
2、多分支
if(i%4 == 0 && i%100 != 0){
{System.out.println(i+"年是闰年");}
}
else if(i%400==0){
System.out.println(i+"年是闰年");
}
else{
System.out.println(i+"年不是闰年");
}
3、嵌套分支(最好不超过3层)
实例:做一个票价查询系统:
import java.util.Scanner;
public class IfExersice{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入您要查询的月份:");
int month = scanner.nextInt();
if(month >=1 && month <=12){
if(month >=4 &&month<=10){
System.out.println("请输入您的年龄:");
int age = scanner.nextInt();
if(age > 0 && age < 18){
System.out.println("票价为30元");
}
else if(age >=18 && age<=60){
System.out.println("票价为60元");
}
else{
System.out.println("票价为20元");
}
}
else{
System.out.println("请输入您的年龄:");
int age = scanner.nextInt();
if(age >=18 && age<=60){
System.out.println("票价为40元");
}
else{
System.out.println("票价为20元");
}
}
}
else
{
System.out.println("您输入的月份有误,请重新输入!");
}
}
}
分支控制(switch)
注意事项:
1、表达式数据类型和常量数据类型必须一致,或者可以自动转换成可以比较的类型。
2、表达式返回值必须是[byte,short,int,String,char,enum[枚举]];
3、case中的值必须是常量;
4、default子句可以自行选择加或者不加;
5、如果没有break语句,会无视case直接执行下一个执行语句,遇到break跳出。
6、如果判断的具体数据类型不多,可以考虑使用switch;如果是区间判断,或者对结果的boolean类型的判断,使用if语句。
循环控制(for)
for( ; ; ){执行语句;break;}死循环,通过break退出。循环迭代也可以允许多个变量迭代:for(int i=1,j=1;i<x;i++,j++);
注意事项:
1、编程思想很重要,拿到题目后,首先要化繁为简,然后要先死后活,也就是先定义常量,后考虑变量,而且其中固定的值也可以使用一个变量来代替,方便题目需求的更改。
2、判断完循环条件之后,再执行循环代码,最后执行循环变量的迭代。
循环控制(while和dowhile)
while
和for循环一样有四要素,只是位置不一样。
作业:1、找1-100里面可以被3整除的数;2、找40-200里面的偶数。
其中偶数也就是可以被2 整除的数,所以两题可以使用同一个程序。
import java.util.Scanner;//导入Scanner包
public class While01{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);//定义一个scanner的方法;
System.out.print("请输入被除数:");
int start=scanner.nextInt();
System.out.print("请输入除数:");
int j=scanner.nextInt();
System.out.print("请输入最大值:");
int end =scanner.nextInt();
while(start <= end){
if(start % j ==0){
System.out.println(start + "能够被"+ j+"整除");
}
start++;
}
}
}
dowhile
所有课堂作业:
import java.util.Scanner;
public class Dowhile01{
public static void main(String[] args){
/*int i=1;
do{
if(i%3==0){
System.out.println("i="+i);
}
i++;
}while(i<=100);*/
//课堂练习题:利用dowhile打印1-100;
/*int i=1;
do{
System.out.println("i="+ i);
i++;
}while(i<=100);*/
//课堂练习:打印1-100的和;
/*int i=1;
int sum=0;
do{
sum=sum+i;
i++;
}while(i<=100);
System.out.println("sum="+ sum);*/
//打印1-200之间能够被5整除但是不能被3整除的个数,总和;
/*int i=1;
int sum = 0,j=0;
do{
if(i % 5==0 && i%3 !=0){
System.out.println("i="+ i);
j++;
sum=sum+i;
}
i++;
}while(i <= 200);
System.out.println("j="+j);
System.out.println("sum ="+sum);*/
//如果不还钱则输出aaa,还钱则退出执行命令;
Scanner scanner = new Scanner(System.in);
char answer = ' ';
do{
System.out.println("aaa");
System.out.println("还不还?");
answer = scanner.next().charAt(0);
}while(answer != 'y');
System.out.println("程序结束");
}
}
注意事项:
1、for和while是先判断后执行,不符合条件就退出;而dowhile是先执行后判断,至少执行一次,不符合条件就退出。
多层循环控制
循环程序执行步骤:
- 外层循环条件初始化;
- 外层循环条件判断;
- 内层循环条件初始化;
- 内层循环条件判断;
- 内层循环代码块执行;
- 内层循环变量迭代;
- 内层结束循环;
- 外层循环变量迭代;
- 重复3-8;
- 外层循环结束。
注意事项:
1、只有内层循环结束才能开始外层循环;
课后习题:
1、一共3个班,每个班5个人,成绩从键盘输入;统计每个班的成绩总分,统计3个班的所有成绩总和。
import java.util.Scanner;
public class MulFor01{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int sum1 = 0;
int sum = 0;
for(int i=1;i<=3;i++){
for(int j=1;j<=5;j++){
System.out.println("请输入第" + i +"个班第"+ j+"个学生的成绩");
int grade = scanner.nextInt();
sum1 +=grade;
}
System.out.println("第"+i + "个班的成绩总分为"+ sum1);
sum +=sum1;
sum1 = 0;
}
System.out.println("3个班的成绩总分为"+ sum);
}
}
课后作业:打造空心金字塔以及空心菱形
//打印空心金字塔
/*老师代码
for(int i=1;i<=num;i++){
for(int k=1;k<=num-i;k++){
System.out.print(" ");
}
for(int j=1;j<=i*2-1;j++){
if(j==1 || j==i*2-1 || i==num){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.print("\n");
}
*/
import java.util.Scanner;
public class MulFor03{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
for(int i=1;i<=num;i++){
if(i ==1 || i==num){
for(int k=num;k>=i;k--){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
System.out.print("*");
}
for(int m=2;m<=i;m++){
System.out.print("*");
}
System.out.print("\n");
}
else{
for(int k=num;k>=i;k--){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
if(j==1){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
for(int m=2;m<=i;m++){
if(m != i){
System.out.print(" ");
}
else{
System.out.print("*");
}
}
System.out.print("\n");
}
}
}
}
//打印空心菱形
/*思路分析:
1、先打印一个矩形:
*****
*****
*****
*****
*****
2、打印半个金字塔
*
**
***
****
*****
3、打印整个金子塔
* //第一行:1个 层数*2-1 空格 4个=5-1(层数)
*** //第二行:3个 2*2-1 空格 3个=5-2(层数)
***** //第三行:5个 3*2-1 空格 2个=5-3(层数)
******* //第四行:7个 4*2-1 空格 1个=5-4(层数)
********* //第五行:9个 5*2-1 空格 0个=5-5(层数)
第一行个数
4、打印空心金字塔:空格正常,但是*号只有第一行和最后一行正常
5、菱形
* //第一行:1个 层数*2-1 空格 4个=5-1(层数)
*** //第二行:3个 2*2-1 空格 3个=5-2(层数)
***** //第三行:5个 3*2-1 空格 2个=5-3(层数)
******* //第四行:7个 4*2-1 空格 1个=5-4(层数)
********* //第五行:9个 5*2-1 空格 0个=5-5(层数)
******* //第六行:7个 4*2-1 空格 1个=5-4(层数)
***** //第七行:5个 3*2-1 空格 2个=5-3(层数)
*** //第七行:3个 2*2-1 空格 3个=5-2(层数)
* //第七行:1个 1*2-1 空格 4个=5-11||(层数)
*/
import java.util.Scanner;
public class Stars{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
for(int i=1;i<=num;i++){
for(int k=1;k<=num-i;k++){
System.out.print(" ");
}
for(int j=1;j<=i*2-1;j++){
if(j==1 || j==i*2-1 ){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.print("\n");
}
for(int a=num-1;a>=1;a--){
for(int j=1;j<=num-a;j++)
{
System.out.print(" ");
}
for(int i=1;i<=a*2-1;i++){
if(i==1 ||i==a*2-1){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.println("");
}
}
}
控制结构作业
1、while+break
public class Three01{
public static void main(String[] args){
int sum = 100000;
int i=0;
while(true){
if(sum > 50000){
sum = sum -(int)(sum*0.05);
i++;
}
else if( sum >=1000 && sum <=50000){
sum =sum -1000;
i++;
}
else{
break;
}
}
System.out.println("该人一共可以经过" + i+ "次路口。");
System.out.println("该人还剩" + sum+ "元");
}
}
2、if-else
import java.util.Scanner;
public class Three02{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
int x = scanner.nextInt();
if(x > 0){
System.out.println("输入的数大于0");
}
else if(x < 0){
System.out.println("输入的数小于0");
}
else{
System.out.println("输入的数等于0");
}
}
}
import java.util.Scanner;
public class Three03{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
int x = scanner.nextInt();
if(x%4 == 0 || x%100==0){
System.out.println("是闰年。");
}
else{
System.out.println("不是闰年。");
}
}
}
import java.util.Scanner;
public class Three04{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
int x = scanner.nextInt();
if(Math.pow(x/100,3) + Math.pow(x/10%10,3) + Math.pow(x%10,3) == x){
System.out.println("是水仙花数");
}
else
{
System.out.println("不是水仙花数");
}
}
}
3、for循环
import java.util.Scanner;
public class Three06{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
int x = scanner.nextInt();
int j=0;
for(int i=1;i<=x;i++){
if(i%5 != 0){
System.out.print(i+ " ");
j++;
if(j % 5 ==0){
System.out.println();
}
}
}
}
}
public class Three08{
public static void main(String[] args){
double sum = 0;
for(int i=1;i<=100;i++){
if(i%2 != 0){
sum = sum + 1.0/i;
}
else
{
sum = sum - 1.0/i;
}
}
System.out.println(sum);
}
}
public class Three09{
public static void main(String[] args){
int sum =0;
for(int i=1;i<=100;i++){
for(int j=1;j<=i;j++){
sum =sum + j;
}
}
System.out.println(sum);
}
}