JavaEE 学习笔记 第二章 Java基本语法 5

第二章 Java基本语法



2.8 程序流程控制

2.8.4 嵌套循环

        将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环。其中,for,while,do...while均可以作为外层循环内层循环。外层循环:循环结构B;内层循环:循环结构A。

        实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。

        内层循环结构循环一遍,只相当于外层循环循环体执行了一次,假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行可m*n次。

        技巧:外层循环控制行数,内层循环控制列数


1).九九乘法表

2).100以内的所有质数

        质数:素数,只能被1和它本身整除的自然数

import org.junit.Test;

public class Demo {

    @Test
    public void primeNumberTest() {

        boolean flag = true;

        for (int i = 2; i <= 100; i++) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0) {
                //为什么要定义变量flag?
                //因为只能被1和它本身整除的才是质数,而如果if的判断条件为true
                //则这个数不是质数。因为进入if判断条件,意味着这个数能被2到i-1的某个数整除
                    flag = false;
                }
            }
            if (flag) {
                System.out.print(i+",");
            }
        //因为内层循环会把flag的值设置为false
        //如果没有下面的语句,flag的值在进入内层循环之后将永远为false
            flag = true;
        }
    }
}

2.8.5 特殊关键字的使用 break,continue,return

   break

continue

        continue 只能使用在循环结构中

        continue 语句用于跳过其所在循环语句块的一次执行,继续下一次循环

        continue 语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环

 

        return

        return 并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法直接结束。

        与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。


2.9 综合项目 - 家庭记账软件

 

package com.oceanstar;

import java.util.Scanner;

public class FamilyAccount {

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

    // 一定能得到n位数
    public static String readKeyBoard(int limit) {
        String line = "";

        while (scanner.hasNext()) {
            line = scanner.nextLine();
            if (line.length() < 1 || line.length() > limit) {
                System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
                continue;
            }
            break;
        }

        return line;
    }

    public static String readString(){
        // 因为这个函数得到的已经是小于等于8长度的字符串了,所以不需要处理,直接返回即可
        return readKeyBoard(8);  // 各个函数一定是相对封闭的,写函数的时候要确保这个函数独立正确
    }
    // 直到输入正确才跳出循环: 这里它确保了输入正确
    private static char readMenuSelection(){
        char c;
        for (; ; ) {
            String str = readKeyBoard(1);
            c = str.charAt(0);
            if (c != '1' && c != '2' && c != '3' && c != '4') {
                System.out.print("选择错误,请重新输入:");
            } else
                break;
        }
        return c;
    }

    // 确保能够得到'Y', 'y', 'N', 'n'
    private static char readConfirmSelection(){
        char c;
        for (; ; ) {
            String str = readKeyBoard(1);
            c = str.charAt(0);
            if (c != 'Y' && c != 'y' && c != 'N' && c != 'n') {
                System.out.print("选择错误,请重新输入:");
            } else
                break;
        }
        return c;
    }

    // 直到输入正确才能跳出循环
    private static int readNumber(){
        int i = 0;
        for (; ; ) {
            String str = readKeyBoard(4);

            try {
                i = Integer.parseInt(str);
                if (i < 0){
                    throw new Exception("必须输入一个正整数");
                }
                break;
            }catch (Exception e){
                System.out.print("必须输入一个正整数:");
            }
        }
        return i;
    }


    public static void main(String[] args) {
        int balance = 10000;
        String details = "";
        while (true){
            System.out.print("-----------------家庭收支记账软件-----------------\n" +
                    "1 收支明细\n" +
                    "2 登记收入\n" +
                    "3 登记支出\n" +
                    "4 退 出\n" +
                    "请选择(1-4):");
            char c = readMenuSelection(); // 工具一定是正确的输出
            switch (c){
                case '1':
                    System.out.println("-----------------当前收支明细记录-----------------");
                    System.out.println("收支\t账户金额\t收支金额\t说明");
                    System.out.println(details);
                    System.out.println("---------------------------------------------");
                    break;
                case '2':
                    System.out.println("----------------------本次收入-----------------------");
                    System.out.print("本次收入金额:");
                    int t = readNumber();// 工具得到的数一定是正整数
                    balance = balance + t;
                    System.out.print("本次收入说明:");
                    String s = readString();
                    details = details + "收入\t" + balance + "\t" + t + "\t" + s + "\n";
                    System.out.println("---------------------登记完成-------------------");
                    break;
                case '3':
                    System.out.println("----------------------本次支出-----------------------");
                    System.out.print("本次支出金额:");
                    int t1 = readNumber();// 工具得到的数一定是正整数
                    if (t1 > balance){
                        System.out.println("余额不足");
                        break;
                    }
                    balance = balance - t1;
                    System.out.print("本次支出说明:");
                    String s1 = readString();
                    details = details + "支出\t" + balance + "\t" + t1 + "\t" + s1 + "\n";
                    System.out.println("---------------------登记完成-------------------");
                    break;
                case '4':
                    System.out.print("确认是否退出(Y/N):");
                    char d = Character.toLowerCase(readConfirmSelection());
                    if (d == 'y'){
                        return;
                    }
                    break;
            }
        }
    }
}


点击进入:下一节:JavaEE 学习笔记 第三章 数组 6

Guess you like

Origin blog.csdn.net/woailuo8214/article/details/121220300