返回顶部
扩大
缩小

Heaton

第2章 Java基本语法(下): 流程控制--项目(记账本)

2-5 程序流程控制

2-5-1 顺序结构

2-5-2 分支语句1:if-else结构



案例

	class IfTest1{
		public static void main(String[] args) {
			
			//表现形式一:
			int heartBeats = 50;
			if(heartBeats < 60 || heartBeats > 100){
				System.out.println("请做进一步的心跳检查");
			}
	
			System.out.println("体检结束");
	
			//表现形式二:二选一
			int age = 23;
			if(age > 18){
				System.out.println("你可以看小电影了!");
			}else{
				System.out.println("你先看看动画片,偶像剧");
			}
	
			//表现形式三:多选一
			if(age < 0){
				System.out.println("输入的数据非法");
			}else if( age < 18){
				System.out.println("青少年时期");
			}else if( age < 35){
				System.out.println("青壮年时期");
			}else if( age < 50){
				System.out.println("中年时期");
			}else if( age < 80){
				System.out.println("老年时期");
			}else if(age < 120){
				System.out.println("晚年时期");
			}else{
				System.out.println("你可能不是人类!");
			}
			
		}
	}

题前补充 补充Scanner

案例

	/**
	如何从键盘获取不同类型的变量。

	解决方法:使用Scanner类
	具体实现步骤:
		1.导包:import java.util.Scanner;
		2.实例化Scanner
		3.调用相关的方法,获取不同类型的变量
	//1.导包:import java.util.Scanner;
	*/

	import java.util.Scanner;

	class ScannerTest {
		public static void main(String[] args) {
			//2.实例化Scanner
			Scanner scanner = new Scanner(System.in);

			//3.调用相关的方法,获取不同类型的变量
			System.out.println("请输入你的姓名:");
			String name = scanner.next();
			System.out.println(name + "----");


			System.out.println("请输入你的年龄:");
			int age = scanner.nextInt();
			System.out.println("age = " + age);

			System.out.println("请输入你的体重:");
			double weight = scanner.nextDouble();
			System.out.println("weight = " + weight);

			System.out.println("你帅吗?(true/false):");
			boolean isHandsome = scanner.nextBoolean();
			System.out.println("isHandsome = " + isHandsome);

			//说明一:
			//scanner.nextChar();//Scanner类中没有从键盘获取char的方法!
			//说明二:用户输入的变量类型要与调用的方法需要的类型要一致。否则,报InputMismatchException


		}
	}

例题一

案例

	/**
	岳小鹏参加Java考试,他和父亲岳不群达成承诺:
	如果:
	成绩为100分时,奖励一辆BMW;
	成绩为(80,99]时,奖励一台iphone7plus;
	当成绩为[60,80]时,奖励一个 iPad;
	其它时,什么奖励也没有。
	请从键盘输入岳小鹏的期末成绩,并加以判断
	
	说明:1.else结构:可选的。
	2.如果两个条件表达式没有公共的交集,此时两个else if结构,可以交换顺序。
	如果两个条件表达式有公共的交集,要求将范围小的条件表达式放在范围大的条件表达式的上面,此时两个条件表达式
	才有可能都被执行到。
	*/
	
	
	import java.util.Scanner;
	class IfTest2{
		public static void main(String[] args) {
			
			Scanner s = new Scanner(System.in);
	
			System.out.println("请输入岳小鹏的期末成绩:");
			int score = s.nextInt();
	
			if(score == 100){
				System.out.println("奖励一辆BMW");
			}else if(score > 80){
				System.out.println("奖励一台iphone7plus");
			}else if(score >= 60){
				System.out.println("奖励一台ipad");
			}
			/*
			else{
				System.out.println("什么奖励也没有");
			}
	
			*/
			
		}
	}

例2

案例

	/**
	编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,
	对它们进行排序(使用 if-else if-else),并且从小到大输出。
	
	说明:1.if-else可以嵌套使用的
	2.如果if-else中的执行语句只有一行,那么可以省略其所在的一对{}
	*/
	
	
	import java.util.Scanner;
	class IfTest1 {
		public static void main(String [] arguments){
			Scanner s = new Scanner(System.in);
			System.out.println("请输入第一个整数:");
			int num1 = s.nextInt();
			System.out.println("请输入第一个整数:");
			int num2 = s.nextInt();
			System.out.println("请输入第一个整数:");
			int num3 = s.nextInt();
			
			if(num1>num2){
				if(num3>=num1){
					System.out.println(num3+"--"+num1+"--"+num2);
				}else if(num3<num1){
					if(num3>=num2){
						System.out.println(num1+"--"+num3+"--"+num2);
					}else{
						System.out.println(num1+"--"+num2+"--"+num3);
					}
				}
			}else{
				if(num1>=num3){
					System.out.println(num2+"--"+num1+"--"+num3);
				}else if(num3>=num1){
					if(num3>=num2){
						System.out.println(num3+"--"+num2+"--"+num1);
					}else{
						System.out.println(num2+"--"+num3+"--"+num1);
					}
				}
			}
			
		}
	}

练习一

public class IfExer{
	public static void main(String [] args){
		/*
		int x = 4;
		int y = 1;
		if (x > 2) {
        if (y < 2){
                System.out.println(x + y);
        }        
		System.out.println("xxxx");
		} else{
        System.out.println("x is " + x);
		}
		//输出xxx
		
		*/
		boolean b = true;
              if(b == false)  //如果写成if(b=false)能编译通过吗?如果能,结果是?
	    System.out.println("a");
             else if(b)
	    System.out.println("b");
             else if(!b)
	    System.out.println("c");
             else
	    System.out.println("d");
		//输出b,换成=号后输出c
	}
}

练习二

案例

import java.util.*;
import java.lang.Math;

public class IfTest2{
	public static void main(String [] main){
		//1题:编写程序,声明2个int型变量并赋值。
		//判断两数之和,如果大于等于50,打印“hello world!”
		int num1 = 28;
		int num2 = 33;
		if((num1+num2)>=50){
			System.out.println("hello world!");
		}
		//2题:编写程序,声明2个double型变量并赋值。
		//判断第一个数大于10.0,且第2个数小于20.0,打印两数之和
		double num3 = 11.12312;
		double num4 = 11.22;
		if(num3>10.0&num4<20.0){
			System.out.println("两个数之和:"+(num3+num4));
		}else{
			System.out.println("不满足条件");
		}
		/*3题
		求ax2+bx+c=0方程的根。a,b,c分别为函数的参数,如果:b2-4ac>0,
		则有两个解;b2-4ac=0,则有一个解;b2-4ac<0,则无解;
		提示1:x1=(-b+sqrt(b2-4ac))/2a
			   X2=(-b-sqrt(b2-4ac))/2a
		提示2:Math.sqrt(num);
		*/
		//double d = Math.sqrt(0.36);
		//System.out.println(d);
		//System.out.println(Math.max(3,6));
		//System.out.println(Math.min(3,6));
		
		Scanner s = new Scanner(System.in);
		System.out.println("请输入a:");
		double a = s.nextDouble();
		System.out.println("请输入b:");
		float b = s.nextFloat();
		System.out.println("请输入c:");
		int c = s.nextInt();
		//判断条件
		double t = b*b - 4*a*c;
		System.out.println("t:"+t);
		//如果:b2-4ac>0,则有两个解
		if(a!=0){
			if(t > 0){
				System.out.println("方程有两个解分别为:");
				System.out.println("x1: "+ (-b+Math.sqrt(b*b-4*a*c))/2*a);
				System.out.println("x2:"+ (-b-Math.sqrt(b*b-4*a*c))/2*a);
			}else if(t==0){
				System.out.println("方程有一个解为:");
				System.out.println("x1=x2 =" + (-b-Math.sqrt(b*b-4*a*c))/2*a);
			}else{
				System.out.println("方程无解");
			}
		}else{
			//A等于0后是一元一次方程,然后就是-c/b,B不能为0,否则报ArithmeticException
			if(b!=0){
				System.out.println("方程有一个解:");
				System.out.println("x1=x2 =" + -c/b);
				
			}else{
				System.out.println("等式不成立");
			}
			
		}
		
		
		
	}
}

练习3

案例

	/**
	大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,
	当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
	如果这三个条件同时满足,则:“我一定要嫁给他!!!”
	如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
	如果三个条件都不满足,则:“不嫁!”
	*/
	
	
	import java.util.Scanner;
	class MarryTest {
		public static void main(String[] args) {
			Scanner s = new Scanner(System.in);
			System.out.println("请输入你的身高(cm):");
			int height = s.nextInt();
			System.out.println("请输入你的财富(千万):");
			double wealth = s.nextDouble();
			//方式一:
			//System.out.println("你帅吗?(true/false):");
			//boolean isHandsome = s.nextBoolean();
			//方式二:
			System.out.println("你帅吗?(是/否):");
			String isHandsome = s.next();
	
			if(height >= 180 && wealth >= 1.0 && "是".equals(isHandsome)){
				System.out.println("我一定要嫁给他!!!");
			}else if(height >= 180 || wealth >= 1.0 || "是".equals(isHandsome)){
				System.out.println("嫁吧,比上不足,比下有余。");
			}else{
				System.out.println("不嫁");
			}
	
		}
	}

练习4

案例

	import java.util.Scanner;
	class  LotteryTest {
		public static void main(String[] args) {
			Scanner s = new Scanner(System.in);

			int lotteryNum = (int) (90 * Math.random() + 10);
			System.out.println("彩票号是:" + lotteryNum);
			int lotteryGe = lotteryNum % 10;
			int lotteryShi = lotteryNum / 10;

			System.out.println("请输入一个两位数");
			int myNum = s.nextInt();
			int myGe = myNum % 10;
			int myShi = myNum / 10;

			if (myNum == lotteryNum) {
				System.out.println("奖金10 000美元");
			} else if (myShi == lotteryGe && myGe == lotteryShi) {
				System.out.println("奖金 3 000美元");
			} else if (myShi == lotteryShi || myGe == lotteryGe) {
				System.out.println("奖金1 000美元");
			} else if(myShi == lotteryGe || myGe == lotteryShi){
				System.out.println("奖金500美元");
			} else {
				System.out.println("彩票作废");
			}
		}
	}
万年历
import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        /*做万年历
         * 1、请出入年
         * 2、判断闰年
         * 3、判断月*/    
        int year;
        int month;
        int days = 0 ;//保存日期
        boolean isRn;//闰年保存true,否则false;
        int totalDays =0;
        System.out.println("****使用万年历****");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年");
        year = sc.nextInt();
        System.out.println("请输入月");
        month = sc.nextInt();
        if((year%400==0)||(year%4==0&&year%100!=0)){
            isRn = true;
        }else{
            isRn = false;
        }
        if(isRn){
            System.out.println(year+"闰年");
        }else{
            System.out.println(year+"非闰年");
        }

        //计算年的总天数
        for(int i=1900;i<year;i++){
            if((i%400==0)||(i%4==0&&i%100!=0)){
                totalDays += 366;
            }else{
                totalDays += 365;
            }
        }
        //计算输入月份之前的天数
        for(int i =1;i<=month;i++){
        switch(i){
        case 1: 
        case 3: 
        case 5: 
        case 7: 
        case 8: 
        case 10: 
        case 12: 
            days = 31;
            break;
        case 2:
            if(isRn){
                days=29;
            }else{
                days=28;
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            days =30;
            break;
        default:
            System.out.println("输入有误");
        }
//        输入月的天数保存到days中,但没有累加进去
        if(i!=month){
        totalDays += days;
        }
        }
//        求出星期几,其实就是前面的\t的个数
       int beforeDays;
       beforeDays = 1+totalDays%7;
        if(beforeDays==7){
            beforeDays=0;//代表星期天,0个\t
        }
        System.out.println("星期天\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
        for(int i=0;i<beforeDays;i++){
            System.out.print("\t");
        }
        for(int i=1;i<days;i++){
            System.out.print(i+"\t");
            //满7个换行
            if((i+beforeDays)%7==0){
                System.out.println();
            }
        }
    }
}

2-5-3 分支语句2:switch-case结构




案例

	/**
	说明:1.根据case中的情况,选择满足条件的case进入执行其语句。执行完此case中的语句后,仍会继续向下执行其他的
	case语句,直到遇到break或者执行完所有的case结束。
	2.break:可以使用在switch-case结构中,表示结束当前的switch-case结构。
	3.default:是可选的,同时位置是灵活的。
	4.switch中的表达式代表的数据类型只能是如下的这些:byte short char int 枚举类的对象 String(jdk7.0新增)
	*/

	class SwitchTest1 {
		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("other");
				break;
			}

			//*************************
			String season = "summer";
			switch (season) {
				case "spring":
					System.out.println("春暖花开");
					break;
				case "summer":
					System.out.println("夏日炎炎");
					break;
				case "autumn":
					System.out.println("秋高气爽");
					break;
				case "winter":
					System.out.println("冬雪皑皑");
					break;

				default:
					System.out.println("季节输入有误");
					break;
				}
			
			//*********如下的情况不可以执行*************
			/*boolean isHandsome = true;
			switch(isHandsome){
			case true:
				System.out.println("帅");
				break;
			case false:
				System.out.println("不帅");
				break;

			}
			*/

			/*

			int age = 23;
			switch(age){
			
			case age < 18:
				System.out.println("未成年人");
			case age >= 18:
				System.out.println("成年人");

			}
			*/
		}
	}

/*
1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。 String?char

2.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

3.根据用于指定月份,打印该月份所属的季节。
3,4,5 春季 6,7,8 夏季  9,10,11 秋季 12, 1, 2 冬季

4. 编写程序:从键盘上输入2017年的“month”和“day”,要求通过程序输出输入的日期为2017年的第几天。

*/
import java.util.Scanner;

public class SwitchExer1{
	public static void main(String [] args){
		/*1*/
		Scanner s = new Scanner(System.in);
		System.out.println("请输入一个字符:");
		String str = s.next();
		char c = str.charAt(0);
		System.out.println(c);
		switch(c){
			case 'a': 
				System.out.println("A");
				break;
			case 'b': 	
				System.out.println("B");
				break;
			case 'c': 	
				System.out.println("C");
				break;
			case 'd': 	
				System.out.println("D");
				break;
			case 'e': 	
				System.out.println("E");
				break;
			default: 	
				System.out.println("OTHER");
				break;
		}
		/*2*/
		System.out.println("请输入成绩");
		int score = s.nextInt();
		switch(score / 10){
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
				System.out.println("不及格");
				break;
			case 6:
			case 7:
			case 8:
			case 9:
			case 10:
				System.out.println("及格");
				break;
			default:
				System.out.println("请输入正确的成绩");
				break;
		}
		/*3
		根据用于指定月份,打印该月份所属的季节。
		3,4,5 春季 6,7,8 夏季  9,10,11 秋季 12, 1, 2 冬季
		*/
		System.out.println("请输入月份");
		int month = s.nextInt();
		switch(month){
			case 3:
			case 4:
			case 5:
				System.out.println("春季");
				break;
			case 6:
			case 7:
			case 8:
				System.out.println("夏季");
				break;
			case 9:
			case 10:
			case 11:
				System.out.println("秋季");
				break;
			case 2:	
				System.out.println("春节");
			case 12:	
			case 1:
				System.out.println("冬季");
				break;
		}
		
		/*4
		 编写程序:从键盘上输入2017年的“month”和“day”,
		 要求通过程序输出输入的日期为2018年的第几天。
		*/
		System.out.println("请输入月份");
		int mm = s.nextInt();
		System.out.println("请输入日期");
		int dd = s.nextInt();
		int sumDays = 0; //记录总天数
		/*
		if(mm == 1){
			sumDays = dd;
		}else if(mm == 2){
			sumDays = 31 + dd;
		}
		*/
		switch(mm){
			case 12:
				sumDays += 30;
			case 11:
				sumDays += 31;
			case 10:
				sumDays += 30;
			case 9:
				sumDays += 31;
			case 8:
				sumDays += 31;
			case 7:
				sumDays += 30;
			case 6:
				sumDays += 31;
			case 5:
				sumDays += 30;
			case 4:
				sumDays += 31;
			case 3:
				sumDays += 28;
			case 2:
				sumDays += 31;
			case 1:
				sumDays += dd;
		}
		System.out.println("2018年"+mm+"月"+dd+"日--是当年的第"+sumDays+"天!");
		
		
	}
}





案例

	/*
	编写一个程序,为一个给定的年份找出其对应的中国生肖。中国的生肖基于12年一个周期,
	每年用一个动物代表:rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、
	rooster、dog、pig。
	*/
	import java.util.Scanner;
	public class AnimalTest {
		public static void main(String[] args) {
			Scanner s = new Scanner(System.in);
			System.out.println("请输入一个年份:");
			int year = s.nextInt();
			switch(year % 12){
			case 0:
				System.out.println("monkey");
				break;
			case 1:
				System.out.println("rooster");
				break;
			case 2:
				System.out.println("dog");
				break;
			case 3:
				System.out.println("pig");
				break;
			case 4:
				System.out.println("rat");
				break;
			case 5:
				System.out.println("ox");
				break;
			case 6:
				System.out.println("tiger");
				break;
			case 7:
				System.out.println("rabbit");
				break;
			case 8:
				System.out.println("dragon");
				break;
			case 9:
				System.out.println("snake");
				break;
			case 10:
				System.out.println("horse");
				break;
			case 11:
				System.out.println("sheep");
				break;
				
			}
		}
	}

2-5-4 循环结构


2-5-4 循环结构1:for循环


案例

	/*
	1.循环结构:在某些条件满足的情况下,反复执行特定代码的功能

	2.循环结构的4要素:
	①初始化条件
	②循环条件 --->boolean类型的结果
	③循环体
	④迭代条件

	当循环条件返回false时,结束循环结构。

	3.
	for(①;②;④){
		③;
	}

	执行过程:①-②-③-④-②-③-④-②-③-④-.....-②

	*/
	class ForTest{
		public static void main(String[] args) {
			/*
			System.out.println("Hello World!");
			System.out.println("Hello World!");
			System.out.println("Hello World!");
			System.out.println("Hello World!");
			System.out.println("Hello World!");
			*/

			for(int i = 1;i <= 5;i++){
				System.out.println("Hello World!");
			}

			//练习1
			int a = 1;
			for(System.out.print("a"); a <= 3;System.out.print("b"),a++){
				System.out.print("c");
			}
			//输出:acbcbcb
			
			System.out.println();

			//练习2:遍历100以内的偶数,并输出。同时,输出所有偶数的和,以及偶数的个数
			int sum = 0;//记录偶数的总和
			int count = 0;//记录偶数的个数
			for(int i = 1;i <= 100;i++){
				
				if(i % 2 == 0){
					System.out.println(i);
					sum += i;//累加
					count++;
				}

			}
			System.out.println("总和为:" + sum);
			System.out.println("偶数的总个数为:" + count);
			//System.out.println(i);
		}
	}


案例

	class FooBizBaz{	

		public static void main(String[] args){
			for(int i = 1;i <= 150;i++){
				
				System.out.print(i + "\t");

				if(i % 3 == 0 ){
					System.out.print("foo" + "\t");
				}

				if(i % 5 == 0 ){
					System.out.print("biz" + "\t");
				}
				
				if(i % 7 == 0 ){
					System.out.print("baz" + "\t");
				}

				//换行
				System.out.println();
			}
		}
	}


案例

/**
 * 1.打印1~100之间所有偶数的和
 */
public class ForExer1 {
	public static void main(String[] args) {
		int result = 0;
		for (int i = 1;i<=100;i++){
			if( i % 2 ==0 ){
				result += i;
			}
		}
		System.out.println("偶数result:" + result);

		int i = 1;
		result = 0;
		while ( i<=100 ){
			if( i % 2 ==0 ){
				result += i;
			}
			i++;
		}
		System.out.println("偶数result:" + result);

	}
}

/**
 * 2.打印1~100之间所有是7的倍数的整数的个数及
 *     总和(体会设置计数器的思想)
 */
public class ForExer2 {
    public static void main(String[] args) {
        int count = 0;
        int result = 0;
        for (int i = 1;i<=100;i++){
            if(i%7==0){
                count++;
                result += i;
            }
        }
        System.out.println("count:" + count);
        System.out.println("result:" + result);
    }
}

/* 3、输出所有的水仙花数,所谓水仙花数是指一个3 位数,其各个位上数字立方和等于其本身。 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5
	*/
	class FlowerTest {
		public static void main(String[] args) {
			
			for(int i = 100;i < 1000;i++){
				
				//获取其各个位上的数值
				int i1 = i / 100;//百位
				int i2 = (i - 100 * i1) / 10;//十位  i % 100 / 10
				int i3 = i % 10;//个位

				if(i == i1 * i1 * i1 + i2 * i2 * i2 + i3 * i3 * i3){
					System.out.println(i);
				}
			}

		}
	}

/* 4、输入两个正整数m和n,求其最大公约数和最小公倍数。 */ class NumberTest { public static void main(String[] args) {
			int m = 12;
			int n = 28;

			int min = (m > n)? n : m;//获取两个数中的较小值
			int max = (m > n)? m : n;//获取两个数中的较大值


			//求最大公约数
			for(int i = min;i >= 1;i--){
				if(m % i == 0 && n % i == 0){
					System.out.println("最大公约数为:" + i);
					break;//使用在循环结构中,一旦执行,结束当前循环。
				}
			}

			//最小公倍数
			for(int i = max;i <= m * n;i++){
				if(i % m == 0 && i % n == 0){
					System.out.println("最小公倍数为:" + i);
					break;
				}
			}
			
		}
	}

2-5-5 循环结构2:while循环


案例

	/*
	1.循环结构的4要素:
	①初始化条件
	②循环条件 --->boolean类型的结果
	③循环体
	④迭代条件

	2.
	①
	while(②){
		③;
		④
	}

	执行过程:①-②-③-④-②-③-④-②-③-④-...-②

	3.for循环和while是可以相互转换的!
	  不同点:关于初始化在出了循环结构以后的调用上:while还可以调用,for不可以调用了。

	*/
	class WhileTest {
		public static void main(String[] args) {
			
			//遍历100以内的偶数,并输出。同时,输出所有偶数的和,以及偶数的个数
			int i = 1;
			int sum = 0;//记录总和
			int count = 0;//记录个数
			while(i <= 100){
				if(i % 2 == 0){
					System.out.println(i);
					sum += i;
					count++;
				}
				//迭代条件
				i++;
				
			}

			System.out.println("总和为:" + sum);
			System.out.println("个数为:" + count);
			System.out.println(i);

		}
	}

2-5-6 循环结构3:do-while循环


案例

	/*
	1.循环结构的4要素:
	①初始化条件
	②循环条件 --->boolean类型的结果
	③循环体
	④迭代条件

	2.do-while结构:

	①
	do{
		③;
		④;
	}while(②);

	执行过程:①-③-④-②-③-④-②-③-④-...②

	do-while:至少执行一次循环体!

	*/
	class DoWhileTest {
		public static void main(String[] args) {
			
			int num1 = 10;
			while(num1 > 10){
				System.out.println("hello1");
				num1--;
			}
			
			//*************************

			int num2 = 10;
			do{
				System.out.println("hello2");
				num2--;
			}while(num2 > 10);

			
			//遍历100以内的偶数,并输出。同时,输出所有偶数的和,以及偶数的个数
			int i = 1;
			int sum = 0;
			int count = 0;
			do{
				if(i % 2 == 0){
					System.out.println(i);
					sum += i;
					count++;
				}
				i++;
			}while(i <= 100);

			System.out.println("总和为:" + sum);
			System.out.println("个数为:" + count);
		}
	}

案例
2

	/*
	从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。

	说明:1.结束循环结构的方式:①循环条件返回false时 ②在循环体中,满足某个条件的情况下,执行break
		  2.for(;;) 或 while(true)

	*/
	import java.util.Scanner;
	class ForExer {
		public static void main(String[] args) {
			
			Scanner s = new Scanner(System.in);
			int positiveNumber = 0;//记录正数的个数
			int negativeNumber = 0;//记录负数的个数


			for(;;){
				System.out.println("请输入一个整数:(输入为0时结束程序)");
				int num = s.nextInt();

				if(num == 0){
					break;
				}else if(num > 0){
					positiveNumber++;
				}else{
					negativeNumber++;
				}

			}

			System.out.println("正数的个数为:" + positiveNumber);
			System.out.println("负数的个数为:" + negativeNumber);


			

		}
	}

2-5-7 嵌套循环

案例

	/*
	1.嵌套循环:一个循环结构a,作为另一个循环结构b的循环体出现。
		内层循环:循环结构a
		外层循环:循环结构b
	2.技巧:1)外层循环控制行数,内层循环控制列数。
			 2)内层循环循环次数为m次,外层循环循环次数n次,则一共需要循环m * n次。

	*/
	class ForForTest {
		public static void main(String[] args){
			
			//******
			//System.out.println("******");

			for(int i = 1;i <= 6;i++){
				System.out.print('*');
			}
			
			System.out.println();
			/*
			******
			******
			******
			******

			*/
			
			for(int j = 1;j <= 4;j++){

				for(int i = 1;i <= 6;i++){
					System.out.print('*');
				}
				System.out.println();
			}


			/*
			*
			**
			***
			****
			*****

			*/
			for(int j = 1;j <= 5;j++){

				for(int i = 1;i <= j;i++){
					System.out.print('*');
				}
				System.out.println();
			}

			/*						
					j		i		i + j == 4
			***		1		3
			**		2		2
			*		3		1


			*/
			for(int j = 1;j <= 3;j++){
				
				for(int i = 1;i <= 4 - j;i++){
					System.out.print('*');
				}
				System.out.println();
			}

		}
	}
练习二
打印
	----*				
	---* *				
	--* * *				
	-* * * *			
	* * * * *	
	 * * * *			
	  * * *				
	   * *				
		*

	class ForForExer{

		public static void main(String[] args){
	/*
	从控制台输出:
	上半部分:			i	j-	k*			j == 5 - i;k == i;
	----*				1	4	1
	---* *				2	3	2
	--* * *				3	2	3
	-* * * *			4	1	4
	* * * * *			5	0	5

	下半部分:			i	j-	k*		j == i; k == 5 - i;

	 * * * *			1	1	4
	  * * *				2	2	3
	   * *				3	3	2
		*				4	4	1

	*/	
			for(int i = 1;i <= 5;i++){
				//-
				for(int j = 1;j <= 5 - i;j++){
					System.out.print(" ");
				}
				//*
				for(int j = 1;j <= i;j++){
					System.out.print("* ");
				}
				System.out.println();
				

			}

			for(int i = 1;i <= 4;i++){
				for(int j = 1;j <= i;j++){
					System.out.print(" ");
				}

				for(int k = 1;k <= 5 - i;k++){
					System.out.print("* ");
				}
				System.out.println();
			}

		}


	}
练习三

九九乘法表

	/*
	1 * 1 = 1
	2 * 1 = 2  2 * 2 = 4
	...
	9 * 1 = 9   ...  9 * 9 = 81
	
	*/
	class NineNineTable {
		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) + "  ");
				} 
	
				//换行
				System.out.println();
			
			}
	
		}
	}
练习四
	/*
	100以内的所有质数.
	质数:只能被1和它本身整除的自然数.--->从2开始,到这个数-1为止的数,都不能被数本身所整除.
	比如:2 3 5 7 11 13 17 ...
		
		待优化
	*/
	class PrimeNumberTest {
		public static void main(String[] args) {
			
			//方式一:
			//boolean isFlag = true;//标识

			for(int i = 2;i <= 100;i++){
				//方式二:
				boolean isFlag = true;//标识
				
				for(int j = 2;j < i;j++){
					
					if(i % j == 0){
						isFlag = false;
					}

				}

				if(isFlag){//if(isFlag == true){
					System.out.println(i);
				}
				//isFlag = true;
			}
		}
	}

2-5-8 特殊关键字的使用:break、continue





案例

	/*

					适用范围						在循环结构中,表示:			相同点
	break			switch-case 或 循环结构			结束当前循环				关键字的后面不能有输出语句,编译不通过
	continue		循环结构						结束当次循环				关键字的后面不能有输出语句,编译不通过

	附加:带标签的break和continue的使用.
	*/
	class BreakContinueTest {
		public static void main(String[] args) {
			
			for(int i = 1;i <= 10;i++){
				if(i % 4 == 0){
					break;
					//continue;
					//System.out.println("热巴今晚要约我!!");

				}
				System.out.print(i);
			
			}

			System.out.println("--------");

			label:for(int i = 1;i <= 4;i++){
			
				for(int j = 1;j <= 10;j++){
					
					if(j % 4 == 0){
						//break;
						//continue;
						//break label;
						continue label;
					}
					System.out.print(j);
				}
				System.out.println();
			}

		}
	}

项目(家庭记账本)













提供工具类

import java.util.Scanner;

/**
 * @author Heaton
 * @email tzy70416450@163.com
 * @date 2018/9/7 0007 15:22
 * @describe public static char       readMenuSelection(){}:该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
 * public static int        readNumber(){}:该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
 * public static String     readString(){}:该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
 * public static char       readConfirmSelection(){}:该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
 * public static void       main(String[]args){}
 * 公共的 静态的 没有返回值   如果不是main,这个就不会执行
 * 有返回值
 */
public class Utility {

	private static Scanner scanner = new Scanner(System.in);

	/**
	 * @param []
	 * @return char
	 * @describe 该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
	 */
	public static char readMenuSelection() {
		char c;
		//while(true){}
		for (; ; ) {
			String str = readKeyBoard(1);
			c = str.charAt(0);
			if (c != '1' && c != '2' && c != '3' && c != '4') {
				System.out.println("选择错误,请重新输入");
			} else {
				break;
			}
		}
		return c;
	}

	/**
	 * @param []
	 * @return int
	 * @describe 该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
	 */
	public static int readNumber() {
		int n;
		for (; ; ) {
			try {
				String str = readKeyBoard(4);
				n = Integer.parseInt(str);
				break;
			} catch (NumberFormatException e) {
				System.out.println("数字输入错误,请重新输入:");
			}
		}
		return n;
	}

	/**
	 * @param []
	 * @return java.lang.String
	 * @describe 该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
	 */
	public static String readString() {
		String str = readKeyBoard(8);
		return str;
	}

	/**
	 * @param []
	 * @return char
	 * @describe 该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
	 */
	public static char readConfirmSelection() {
		char c;

		while (true) {
			String str = readKeyBoard(1).toUpperCase();
			c = str.charAt(0);
			if (c == 'Y' || c == 'N') {
				break;
			} else {
				System.out.println("选择错误,请重新输入");
			}
		}
		return c;
	}


	/**
	 * @param [limit]
	 * @return java.lang.String
	 * @describe 从键盘输入一个指定长度的 变量
	 */
	public static String readKeyBoard(int limit) {
		String line = "";
		while (scanner.hasNext()) {
			line = scanner.nextLine();
			if (line.length() < 1 || line.length() > limit) {
				System.out.println("输入长度(不能大于" + limit + ")错误,请重新输入:");
				continue;
			}
			break;
		}
		return line;
	}


}

项目实体

/**
* @author Heaton
* @email tzy70416450@163.com
* @date 2018/9/7 0007 16:41
* @describe 家庭记账本
*/
public class FamilyAccount {
	public static void main(String[] args) {
		String details = "收支\t账户金额\t收支金额\t说    明\n";
		int balance = 10000;

		boolean loopFlag = true;
		do {
			System.out.println("-----------------家庭收支记账软件-----------------\n");
			System.out.println("                   1 收支明细\n" +
					"                   2 登记收入\n" +
					"                   3 登记支出\n" +
					"                   4 退    出\n");
			System.out.println("                   请选择(1-4):");
			char key = Utility.readMenuSelection();
			switch (key) {
				case '1':
					System.out.println("-----------------当前收支明细记录-----------------");
					System.out.println(details);
					System.out.println("--------------------------------------------------");
					break;
				case '2':
					System.out.println("本次收入金额:");
					int amount1 = Utility.readNumber();
					System.out.println("本次收入说明:");
					String desc1 = Utility.readString();

					balance += amount1;
					details += "收入\t"+balance+"\t\t"+amount1+"\t\t\t"+desc1+"\n";
					System.out.println("本次收入操作成功");
					break;
				case '3':
					System.out.println("本次支出金额:");
					int amount2= Utility.readNumber();
					System.out.println("本次支出说明:");
					String desc2 = Utility.readString();

					balance -= amount2;
					details += "支出\t"+balance+"\t\t"+amount2+"\t\t\t"+desc2+"\n";
					System.out.println("本次支出操作成功");
					break;
				case '4':
					System.out.println("确认是否退出(Y/N):\n");
					char yn = Utility.readConfirmSelection();
					if (yn == 'Y') {
						loopFlag = false;
					}
					break;
			}
		} while (loopFlag);


	}
}

posted on 2018-08-18 17:32  咘雷扎克  阅读(466)  评论(0编辑  收藏  举报

导航