01-Java语法基础(八)-案例


案例一:水仙花数问题

练习描述:

计算1000以内的所有水仙花数。用户输入0到1000以内的某个数,系统输出这个范围内的所有 水仙花数,水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。例 如:1^3 + 5^3 + 3^3 = 153)。

系统交互情况如图所示:
在这里插入图片描述

方案:
       系统使用双层for循环判断某个数是否为水仙花数,外层循环确保每个用户输入的范围内的数都 判断到,里层循环判断某个数是否为水仙花数,m%10取到个位数,例如:int m=153,经过int v=m%10计算后v=3;m /= 10去除各位数,例如:int m=153,经过m /= 10计算后m=15。代码 如下所示:
在这里插入图片描述
如果n和sum相等,那么说明n是水仙花数。代码如下所示:
在这里插入图片描述

实现:
系统代码实现如下:

package basic01;

import java.util.Scanner;

public class Daffodils {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入查找水仙花的范围:0~");
		int max = scanner.nextInt();
		scanner.close();
		for (int n = 3; n <= max; n++) {
			int sum = 0;
			for(int m=n;m>0;m/=10) {
				int v = m%10;
				sum += v*v*v;
			}
			
			if(n==sum) {
				System.out.println(n);
			}
		}
	}
}

扩展:
计算“百钱买百鸡”的问题。 百钱买百鸡:公鸡5文钱一只,母鸡3文钱一只,小鸡1文钱3只,如何用百文钱买百只鸡?
系统交互情况如图所示:
在这里插入图片描述

package basic01;
/**
 * 百钱买百鸡问题:公鸡5文钱一只,母鸡3文钱一只,小鸡1文钱3只,如何用百文钱买百只鸡?
 * @author Administrator
 *
 */
public class DaffodilsExt {
	public static void main(String[] args) {
		int cock,hen ,chick;
		System.out.println("百钱买百鸡的方案如下:");
		for(cock=0;cock<=20;cock++) {
			for (hen=0;hen<=33;hen++) {
				chick = 100 - cock-hen;
				if(chick%3==0) {
					int total = cock*5+hen*3+chick/3;
					if(total==100) {
						System.out.println("公鸡:"+cock+",母鸡:"+hen+",小鸡:"+chick);
					}
				}
			}
		}
	}
}


案例二:猜字母游戏

问题描述:
猜字母游戏。系统随机产生5个按照一定顺序排列的字符,然后由用户输入一个5个字符的字符 串,由程序判断这五个字符和系统所产生的5个字符是否相同(字母和位置均相同)。如果相同, 则程序结束,并计算得分;如果不相同,则输出比较结果以提示用户继续游戏。系统交互情况如图所示:
在这里插入图片描述
方案:
定义一个 5 个长度的字符数组用于存储系统所产生的5个字符,并定义变量记载用户所猜测的 次数。代码如下:
在这里插入图片描述
定义一个数组letters存放所有字符,定义一个boolean类型的数组大小和letters数组大小相 同,用来标识letters数组中的元素是否被选中,代码如下:
在这里插入图片描述
根据所需要产生的字符个数(5个)随机产生字符数组,且字符不能重复。代码如下:
在这里插入图片描述
然后,提示用户录入5个字符后,并转换为字符数组,代码如下:
在这里插入图片描述
判断用户的录入的正确性(需要同时判断字符和位置的正确性),代码如下:
在这里插入图片描述
判断完毕后,需要输出提示信息到界面,并需要计算分数。如果5个字符的位置均正确,则表 示游戏结束,计算并输出用户的得分;否则,将猜测的次数累加1 ,并提示用户所猜对的字符个数 以及位置个数,游戏继续。代码如下:
在这里插入图片描述

代码实现:

package day04;

import java.util.Scanner;


	public class GuesseGame {
		 
		public static void main(String[] args) {
			System.out.println("欢迎来到猜字符游戏!");
			char []chs=generate();
			System.out.print(chs);
			System.out.println();
			int count=0;
			System.out.println("猜字符游戏现在开始?????:");
			while(true){
			Scanner scan=new Scanner(System.in);
			String s=scan.next().toLowerCase();
			if(s.equals("exit")) {
				
				System.out.println("谢谢你的使用!");
				break;
			}
			char []inputchar=s.toCharArray();//此方法用于将用户输入的字符串转换为字符数组
			
				int result[]=check(chs,inputchar);
			
				if(result[1]==chs.length) {
					int score=100*chs.length-100*count;
					System.out.println("恭喜你,猜对了!");
					System.out.println("你的总共得分是:"+score);
					break;
				}else {
					count++;
					System.out.println("你的字母对了"+result[0]+"个"+"你输入的位置对了"+result[1]+"个");
	 
				}
			}
	 
		}
		//将用户输入的字符和系统随机产生的数进行比较
		public static int[] check(char []chs,char[]inputchar) {
			//result[0]表示字母正确
			//result[1]表示位置正确
			int []result=new int[2];
	 
			for (int i = 0; i < chs.length; i++) {
				for (int j = 0; j < inputchar.length; j++) {
					if(chs[i]==inputchar[j]) {
						result[0]++;
						if(i==j) {
							result[1]++;
						}
						break;
					}
				}
			}
			return result;
		}
		//随机生成字符的方法
		public static char[] generate() {
			char []letter= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
			boolean []flags=new boolean[letter.length];
			char []chs=new char[5];
			int index;
			for (int i = 0; i < chs.length; i++) {
				do {
					index=(int)(Math.random()*(letter.length));
				}while(flags[index]==true);
				chs[i]=letter[index];
				flags[index]=true;
			}
			return chs;
		}
	} 
	 

案例三:随机加法运算器

问题描述:
随机加法运算器。系统提示用户输入“Y”或是“Q”,输入Y表示开始测试,输入Q表示退出 系统;系统随机出题,最多10道题,题目为两个100以内的随机数的和,用户输入这两个数的和, 系统根据用户输入的和值,系统判断用户计算的是否正确,正确输出“Correct!”,错误系统输 出“Error”,最后计算用户做题的得分输出到控制台。系统交互情况如图所示:
在这里插入图片描述

方案:
系统使用while(true)使程序一直循环,当遇到break程序规程循环,代码如下:
在这里插入图片描述
系统使用String类的trim()方法,去除用户输入字符串两端的空白,使用String类的 equalsIgnoreCase()方法,比较两个字符串内容是否相等,忽略大小写。代码如下所示:
在这里插入图片描述
系统使用Random的nextInt()方法生成100以内的随机数,代码如下所示:
在这里插入图片描述
系统使用for循环产生10道题目,代码如下所示:
在这里插入图片描述
代码实现:

package day04;

import java.util.Scanner;
import java.util.Random; 
public class AdditionTest{ 
	public static void main(String[]args){ 
		Scanner scanner=new Scanner(System.in);
		while(true){ 
			System.out.print("输入Y开始测验,输入Q退出:"); 
			String c=scanner.next(); 
			if("Q".equalsIgnoreCase(c.trim())){
				break; 
				}
			if(!"Y".equalsIgnoreCase(c.trim())){  
				continue; 
				}
			int score=0;
			int numOfQuestion=10;
			Random ran=new Random();  
			int a,b,answer,key; 
			for(int i=1;i<=numOfQuestion;i++){ 
				a=ran.nextInt(100); 
				b=ran.nextInt(100);
				key=a+b; 
				System.out.print("("+i+")."+a+"+"+b+"=?"); 
				answer=scanner.nextInt(); 
				if(answer==key){
					score+=100/numOfQuestion; 
					System.out.println("Correct!");
					}else{ 
						System.out.println("Error"); 
						} 
				} 
			System.out.println("此次测验结束,你的分数是:"+score); 
			} 
		scanner.close();
		} 
	}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听潮阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值