• 005流程练习与项目一


    while循环

    image-20210113221920511

    do-while循环

    image-20210113222033992

    附:String常用方法

    image-20210114223629058

    嵌套循环练习

    练习1:打印100以内所有质数

    /*
    方式一:
    打印100以内所有质素
    质数 == 素数
    */
    
    class PrimeNumberTest01 {
    	public static void main(String[] args){
    		//程序起始时间
    		long start = System.currentTimeMillis();
    		//统计素数个数
    		int sumNumber = 0;
    		//用于判断,每次循环后是否是素数
    		boolean isFlags = true;
    		
    		for(int i = 2; i <= 100000; i++){
    			//for(int j = 2; j <= i-1; j++){
    			//优化二
    			for(int j = 2; j <= Math.sqrt(i); j++){
    				//不是素数变为false
    				if(i % j == 0){
    					isFlags = false;
    					//优化一
    					break;
    				}
    			}
    			//判断本次循环是否产生了素数
    			if(isFlags == true){
    				//System.out.println(i);
    				sumNumber++;
    			}
    			//重置变量,重新循环判断
    			isFlags = true;
    		}
    
    		long end = System.currentTimeMillis();
    		System.out.println("程序运行时间:" + (end - start) + "	100_000中有多少个素数:" + sumNumber);//未优化: 22159   优化一:2011  优化二:18
    
    	}
    }
    
    /*
    方式二:
    打印100以内所有质数
    
    */
    class PrimeNumberTest02 {
    	public static void main(String[] args){
    		long start = System.currentTimeMillis();
    		int sumNumber = 0;
    		label:for (int i = 2; i <= 100000; i++){
    			for(int j = 2; j <= Math.sqrt(i); j++){
    				if(i % j == 0){
    					continue label;
    				}
    			}
    			sumNumber++;
    		}
    
    		long end = System.currentTimeMillis();
    		System.out.println("程序运行时长是:" + (end - start));
    		System.out.println("质数的个数:" + sumNumber);
    	}
    }
    

    练习2:猜数字游戏

    /*
    随机生成一个100以内的数,猜数字游戏:
    从键盘输入数,如果大了提示,大了,如果小了,提示小了,如果对了,就不再猜了,并统计一共猜了多少次?
    提示:随机数
    
    */
    import java.util.Scanner;
    import java.util.Random;
    class GuessNumberTest01 {
    	public static void main(String[] args){
    		Random random = new Random();
    		int randNumber = random.nextInt(100);
    		int sum = 0;	
    		//限制输入的最大数值
    
    		for( ; ; ){
    			int limits = 99;
    			int perNumber;
    			while(true){
    				System.out.print("请猜点数(输入一个自然数最大取值为:" + limits + " ): ");
    				//获得用户输入的值
    				try{
    					Scanner scanner = new Scanner(System.in);
    					perNumber = scanner.nextInt();
    					if(perNumber < 0 || perNumber > limits){
    						System.out.println("输入的数字超出范围,请重试
    ");
    						continue;
    					}else break;
    				}catch(Exception e){
    					System.out.println("输入违规,请重试
    ");
    				}
    			}
    			sum++;	
    			if(perNumber == randNumber){
    				System.out.println("猜中了");
    				System.out.println("随机数是:" + randNumber);
    				System.out.println("猜中的数是:" + perNumber);
    				System.out.println("用时:" + sum + "次");
    				break;
    			}else if(perNumber > randNumber){
    				System.out.println("猜大了");
    			}else{
    				System.out.println("猜小了");
    			}
    		}
    	}
    }
    

    练习3:打印1-1000之内的完数

    /*
    一个数如果恰好等于它的因子之和,这个数就称为"完数"。(因子:除去这个数本身的约数)
    例如6=1+2+3.编程 找出1000以内的所有完数
    
    */
    class AriTest01 {
    	public static void main(String[] args){
    		for(int i = 1; i <= 1000; i++){
    			int sum = 0;
    			for(int j = 1; j < i; j++){
    				if(i % j == 0){
    					sum += j;
    				}
    			}
    			if(sum == i){
    				System.out.println(i);
    			}
    		}
    	}
    }
    

    练习4:调和级数从第多少项开始值大于10

    /*
    求调和级数中从第多少项开始值大于10
    
    1/1 + 1/2 + 1/3 + 1/4 + … 在数学上称为调和级数。
    它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。
    但是,它发散的很慢:
    前1项和达到 1.0
    前4项和才超过 2.0
    前83项的和才超过 5.0
    那么,请你计算一下,要加多少项,才能使得和达到或超过 10.0 呢?
    请填写这个整数。
    
    */
    class AriTest02{
    	public static void main(String[] args){
    		double sum = 0.0;
    		int num = 1;
    		for( ; ; ){
    			sum += 1.0 / num;
    			if(sum > 10.0){
    				break;
    			}
    			num++;
    		}
    		System.out.println("数值为:" + sum);
    		System.out.println("第 " + num + " 项,大于10");
    	}
    }
    

    练习5:打印菱形

    /*
    打印如下的图形:菱形1
        * 
       * * 
      * * * 
     * * * * 
    * * * * * 
     * * * * 
      * * * 
       * * 
        * 
    
    */
    
    class PrintTest01{
    	public static void main(String[] args){
    		for(int i = 1; i <= 5; i++){
    			for(int j = 4; j >= i; j--){
    				System.out.print(" ");
    			}
    
    			for(int k = 1; k <= i; k++){
    				System.out.print("* ");
    			}
    
    			System.out.println();
    		}
    
    		for(int i = 1; i <= 4; i++){
    
    			for(int a = 1; a <= i; a++){
    				System.out.print(" ");
    			}
    
    			for(int b = 4; b >= i; b--){
    				System.out.print("* ");
    			}
    			System.out.println();
    		}
    	}
    }
    

    练习6:输出十三位条形码

    /*
    生成13位条形码
    Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
    例如:690123456789
    计算其校验码的过程为:
    ① 前十二位的奇数位和6+0+2+4+6+8=26
    ② 前十二位的偶数位和9+1+3+5+7+9=34
    ③ 将奇数和与偶数和的三倍相加26+34*3=128
    ④ 取结果的个位数:128的个位数为8
    ⑤ 用10减去这个个位数10-8=2
    所以校验码为2
    (注:如果取结果的个位数为0,那么校验码不是为10(10-0=10),而是0)
    实现上述代码的功能,计算验证码,输入12位条码,返回带验证码的条码。
    例:输入:692223361219输出:6922233612192
    
    
    */
    import java.util.Scanner;
    class AriTest03 {
    	public static void main(String[] args){
    		//用户做终值
    		String perValue = "";
    		//临时值
    		String value = "";
    		label1:while(true){
    			try{
    				System.out.print("请输入一个十二位数字:");
    				Scanner scanner = new Scanner(System.in);//重点:不得将调用Scanner类写在try外面
    				value = scanner.next();
    				if(value.length() <= 11 || value.length() > 12){
    					System.out.println("输入超出范围");
    					continue label1;
    				}
    			}catch(Exception e){
    				System.out.println("输入的数字违规
    ");
    				continue label1;
    			}
    
    			//检查输入的是否为数字
    			label2:for(int i = 0; i < 12; i++){
    				char numi = value.charAt(i);
    				boolean isFlag = true;//标记,判断输入的是否为数字
    				for(int j = 0; j < 10; j++){
    					if(numi == 'u0030' + j){
    						perValue = perValue + numi;//判断后,将数字存入字符串中
    						continue label2;	
    					}
    				}
    				if(isFlag){
    					System.out.println("输入的值非数字
    ");
    					continue label1;
    				}
    			}
    
    
    			//获得:① 前十二位的奇数位和6+0+2+4+6+8=26  ② 前十二位的偶数位和9+1+3+5+7+9=34
    			int oddNumber = 0;
    			int evenNumber = 0;
    			for(int i = 0; i < 12; i++){
    				String tempi = perValue.substring(i,i+1);
    				int numi = Integer.parseInt(tempi);
    				if((i+1) % 2 != 0){
    					oddNumber += numi;
    				}else{
    					evenNumber += numi;
    				}
    
    			}
    
    
    			//③ 将奇数和与偶数和的三倍相加26+34*3=128  ④ 取结果的个位数:128的个位数为8
    			//⑤ 用10减去这个个位数10-8=2
    
    			int result1 = oddNumber + evenNumber * 3;
    			int result2 = (10 - (result1 % 10)) % 10;
    
    			System.out.println(perValue);
    			System.out.println(oddNumber);
    			System.out.println(evenNumber);
    
    
    			System.out.println("十三位条形码:" + perValue + result2);
    			break;
    
    
    
    		}
    		
    
    	}
    }
    
    

    练习7:判断身体健康

    /*
    开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适。
    */
    import java.util.Scanner;
    class AriTest04 {
    	public static void main(String[] args){
    		Scanner scanner = new Scanner(System.in);
    		System.out.print("请输入身高(cm):");
    		int height = scanner.nextInt();
    
    		System.out.print("请输入体重(斤):");
    		int weight = scanner.nextInt();
    
    		int standard = (height - 108) * 2;
    		if(weight >= standard - 10 && weight <= standard + 10){
    			System.out.println("当前身体健康");
    		}else if(weight <= standard - 10){
    			System.out.println("太瘦了");
    		}else{
    			System.out.println("太胖了");
    		}
    		
    
    	}
    }
    

    项目一:家庭记账系统

    /*
    1. 创建FamilyAccount类及main方法
    2. 在main方法中,参照主流程图,实现程序主体结构
    3. 测试程序,确认可以正常执行第1和第4菜单选项
    
    */
    class FamilyAccountTest01 {
    	public static void main(String[] args){
    		
    		//定义初始值
    		boolean isFlag = true;
    		int balance = 10000;
    		String details = "收支	账户金额	收支金额	说 明
    ";
    
    		while(isFlag){
    			System.out.println("-----------------家庭收支记账软件-----------------");
    			System.out.println("                  1 收支明细");
    			System.out.println("                  2 登记收入");
    			System.out.println("                  3 登记支出");
    			System.out.println("                  4 退    出
    ");
    			System.out.print("                  请选择(1-4):");
    
    			char selection = Utility.readMenuSelection();
    			System.out.println();
    
    			switch(selection){
    				case '1':
    					System.out.println("-----------------当前收支明细记录-----------------");
    					System.out.println(details);
    					System.out.println("--------------------------------------------------
    ");
    					break;
    				case '2':
    					System.out.print("本次收入金额:");
    					int addMoney = Utility.readNumber();
    					System.out.print("本次收入说明:");
    					String addDetails = Utility.readString();
    					balance += addMoney;
    					details += ("收入" + "	" + balance + "		" + addMoney + "		" + addDetails + "
    ");
    					System.out.println();
    					break;
    				case '3':
    					System.out.print("本次支出金额:");
    					int minusMoney = Utility.readNumber();
    					System.out.print("本次支出说明:");
    					String minusDetails = Utility.readString();
    					balance -= minusMoney;
    					details += ("支出" + "	" + balance + "		" + minusMoney + "		" + minusDetails + "
    ");
    					System.out.println();
    					break;
    				case '4':
    					System.out.print("确认是否退出(Y/N):");
    					char confirm = Utility.readConfirmSelection();
    					if(confirm == 'Y'){
    						isFlag = false;
    				}
    			}			
    		}
    	}
    }
    
    import java.util.Scanner;
    /**
    Utility工具类:
    将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。
    */
    public class Utility {
        private static Scanner scanner = new Scanner(System.in);
        /**
    	用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’4’中的任意字符,则方法返回。返回值为用户键入字符。
    	*/
    	public 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;
        }
    	/**
    	用于收入和支出金额的输入。该方法从键盘读取一个不超过4位长度的整数,并将其作为方法的返回值。
    	*/
        public static int readNumber() {
            int n;
            for (; ; ) {
                String str = readKeyBoard(4);
                try {
                    n = Integer.parseInt(str);
                    break;
                } catch (NumberFormatException e) {
                    System.out.print("数字输入错误,请重新输入:");
                }
            }
            return n;
        }
    	/**
    	用于收入和支出说明的输入。该方法从键盘读取一个不超过8位长度的字符串,并将其作为方法的返回值。
    	*/
        public static String readString() {
            String str = readKeyBoard(8);
            return str;
        }
    	
    	/**
    	用于确认选择的输入。该方法从键盘读取‘Y’或’N’,并将其作为方法的返回值。
    	*/
        public static char readConfirmSelection() {
            char c;
            for (; ; ) {
                String str = readKeyBoard(1).toUpperCase();
                c = str.charAt(0);
                if (c == 'Y' || c == 'N') {
                    break;
                } else {
                    System.out.print("选择错误,请重新输入:");
                }
            }
            return c;
        }
    	
    	
        private 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;
        }
    }
    
  • 相关阅读:
    Linux学习——在虚拟机上的Linux进行磁盘分区
    Linux命令学习3——用户管理
    linux 命令学习2
    linux 命令学习1——tr命令
    基于netty的一个简单的时间服务器的实现(netty学习)
    JavaNIO
    JavaNIO中的内存映射io
    打造高效的工作环境 – SHELL 篇
    linux下怎么清理缓存
    清理系统缓存
  • 原文地址:https://www.cnblogs.com/Notesdata/p/14284972.html
Copyright © 2020-2023  润新知