Top

JAVA Fundamental DAY04

  1. 猜数字游戏 V1.0
  2. 猜数字游戏 V2.0
  3. 随机加法运算器

1 猜数字游戏 V1.0

1.1 问题

有猜数字游戏,其游戏规则为:程序内置一个 1 到 1000 之间的数字作为猜测的结果,由用户猜测此数字。用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;直到用户猜对结果,则提示游戏结束。用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0,则游戏终止。游戏的交互过程如下:

1. 游戏刚开始,即提示用户在控制台录入所猜测的数字,交互过程如图-1所示:

图-1

2、用户录入所猜测的数字后,程序进行判断:如果用户所猜测的数字大于结果,则提示“太大了!”;如果用户所猜测的数字小于结果,则提示“太小了”。每次提示猜测结果后,并提醒用户继续猜测。交互过程如图-2所示:

图-2

3、如果用户猜测正确,则由系统提示“恭喜,你猜对了!”,游戏结束。交互过程如图-3所示:

图-3

4、如果用户希望提前退出游戏,则可以录入数字 0,游戏结束。交互过程如图-4所示:

图-4

1.2 方案

首先,此案例中,需要产生一个 1 到 1000 之间的随机整数,该数值就是用户要猜测的结果;然后,提示用户进行第一次猜测,并得到用户从界面所录入的数字。

因为猜测的次数不确定,则使用 while 循环来构建猜测的过程:判断用户所猜测的数字是否与结果相同,只要猜测不正确,则循环继续。每次循环中,首先判断用户录入的数字是否为 0,如果是,则使用 break 退出循环;否则,根据比较结果输出提示信息(“太大了”或者“太小了”),并提示用户继续下一次猜测。

如果用户猜测正确或者录入数字 0,则 while 循环结束。循环结束后,需要判断用户最后一次所录入的数字,如果猜测正确,则提示用户“恭喜,你猜对了!”;如果录入的为数字0 ,则提示用户“真遗憾,下次再挑战吧!”,然后程序结束。程序的流程如图-5所示:

图-20

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main方法

首先定义一个名为 NumberGuessV01 的类,并在类中添加Java应用程序的主方法main,代码如下所示:

public class NumberGuessV01 {
	public static void main(String[] args) {
	}
}

步骤二:读取第一次猜测结果

在main方法中,提示用户录入所猜测的数字,作为第一次猜测;然后,实例化Scanner类,并调用Scanner类的nextInt 方法接收用户从控制台输入的数字。代码如下所示:

import java.util.Scanner;
public class NumberGuessV01 {
	public static void main(String[] args) {
#cold_bold		//生成一个随机数作为猜测的结果
#cold_bold		int num = (int) (Math.random() * 1000) + 1;
#cold_bold
#cold_bold		//第一次猜测
#cold_bold		System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
#cold_bold		Scanner s = new Scanner(System.in);
#cold_bold		int guest = s.nextInt();
}
}

注意:此步骤中,需要导入java.util包下的Scanner类。

步骤三:构建循环

使用 while 循环,判断用户所猜测的数字是否与结果相同:只要猜测不正确,则循环继续。每次循环中,需要使用if-else结构判断用户所录入的数字。首先,判断录入的数字是否为 0,如果为 0 ,表示用户希望退出游戏,则使用 break 退出循环;然后比较猜测的数字和实际数字的大小,并根据比较结果输出提示信息(“太大了”或者“太小了”),然后提示用户继续下一次猜测,并调用Scanner类的nextInt 方法接收用户录入的下一个数字。代码如下所示:

import java.util.Scanner;
public class NumberGuessV01 {
	public static void main(String[] args) {
		//生成一个随机数作为猜测的结果
		int num = (int) (Math.random() * 1000) + 1;

		//第一次猜测
		System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
		Scanner s = new Scanner(System.in);
		int guest = s.nextInt();

#cold_bold		//如果猜测错误,则继续
#cold_bold		while (guest!=num) {
#cold_bold			//输入为0,则退出循环;否则判断数字
#cold_bold			if(guest == 0){
#cold_bold				break;
#cold_bold			} else if (guest > num) {
#cold_bold				System.out.println("太大了!");
#cold_bold			} else {
#cold_bold				System.out.println("太小了!");
#cold_bold			} 
#cold_bold			System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
#cold_bold			guest = s.nextInt();
#cold_bold		}
#cold_bold}
}

步骤四:游戏结束

如果用户猜测正确或者录入数字 0 中止游戏,则 while 循环结束。在while 循环结束后,需要判断用户最后一次所录入的数字, 如果猜测正确,则提示用户“恭喜,你猜对了!”;如果录入的为数字0 ,则提示用户“真遗憾,下次再挑战吧!”。最后将 scanner对象关闭,程序结束。代码如下所示:

import java.util.Scanner;
public class NumberGuessV01 {
	public static void main(String[] args) {
		//生成一个随机数作为猜测的结果
		int num = (int) (Math.random() * 1000) + 1;

		//第一次猜测
		System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
		Scanner s = new Scanner(System.in);
		int guest = s.nextInt();

		//如果猜测错误,则继续
		while (guest!=num) {
			//输入为0,则退出循环;否则判断数字
			if(guest == 0){
				break;			
			}else if (guest > num) {
				System.out.println("太大了!");
			} else {
				System.out.println("太小了!");
			} 
			System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
			guest = s.nextInt();
		}

#cold_bold		//提示用户最终结果
#cold_bold		if(guest == num) {
#cold_bold			System.out.println("恭喜,你猜对了!");
#cold_bold		}else{
#cold_bold			System.out.println("真遗憾,下次再挑战吧!");
#cold_bold		}
#cold_bold		s.close();
}
}

1.4 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;
public class NumberGuessV01 {
	public static void main(String[] args) {
		//生成一个随机数作为猜测的结果
		int num = (int) (Math.random() * 1000) + 1;

		//第一次猜测
		System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
		Scanner s = new Scanner(System.in);
		int guest = s.nextInt();

		//如果猜测错误,则继续
		while (guest!=num) {
			//输入为0,则退出循环;否则判断数字
			if(guest == 0){
				break;			
			} else if (guest > num) {
				System.out.println("太大了!");
			} else {
				System.out.println("太小了!");
			} 
			System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
			guest = s.nextInt();
		}

		//提示用户最终结果
		if(guest == num) {
			System.out.println("恭喜,你猜对了!");
		}else{
			System.out.println("真遗憾,下次再挑战吧!");
		}
		s.close();
}
}

2 猜数字游戏 V2.0

2.1 问题

使用 do-while 语句实现猜数字游戏,界面的交互过程和上一个案例相同。

2.2 方案

此案例的实现方案和之前的案例类似。

首先,此案例中,需要产生一个 1 到 1000 之间的随机整数,该数值就是用户要猜测的结果;然后,提示用户进行第一次猜测,并得到用户从界面所录入的数字。

因为猜测的次数不确定,则使用do-while 循环来构建猜测的过程:判断用户所猜测的数字是否与结果相同,只要猜测不正确,则循环继续。每次循环中,首先判断用户录入的数字是否为 0,如果是,则使用 break 退出循环;否则,根据比较结果输出提示信息(“太大了”或者“太小了”),并提示用户继续下一次猜测。

如果用户猜测正确或者录入数字 0,则循环结束。循环结束后,需要判断用户最后一次所录入的数字,如果猜测正确,则提示用户“恭喜,你猜对了!”;如果录入的为数字0 ,则提示用户“真遗憾,下次再挑战吧!”,然后程序结束。程序的流程如图-6所示:

图-6

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main方法

首先定义一个名为 NumberGuessV03 的类,并在类中添加Java应用程序的主方法main,代码如下所示:

public class NumberGuessV03 {
	public static void main(String[] args) {
	}
}

步骤二:准备录入

在main方法中,生成一个随机数作为猜测的结果,然后实例化Scanner类,用于接收用户从控制台输入的数字,还需要声明变量用于存储用户所录入的数字。代码如下所示:

import java.util.Scanner;
public class NumberGuessV03 {
	public static void main(String[] args) {
#cold_bold		//生成一个随机数作为猜测的结果
#cold_bold		int num = (int) (Math.random() * 1000) + 1;
#cold_bold
#cold_bold		//准备输入
#cold_bold		Scanner s = new Scanner(System.in);
#cold_bold		int guest = -1;
}
}

注意:此步骤中,需要导入java.util包下的Scanner类。

步骤三:构建循环

使用 do-while 循环,提示用户进行猜测,并调用Scanner类的nextInt 方法接收用户录入的数字,然后判断用户所猜测的数字是否与结果相同:只要猜测不正确,则循环继续。

每次循环中,需要使用if-else结构判断用户所录入的数字。首先,判断录入的数字是否为 0,如果为 0 ,表示用户希望退出游戏,则使用 break 退出循环;然后比较猜测的数字和实际数字的大小,并根据比较结果输出提示信息(“太大了”或者“太小了”)。代码如下所示:

import java.util.Scanner;
public class NumberGuessV03 {
	public static void main(String[] args) {
		//生成一个随机数作为猜测的结果
		int num = (int) (Math.random() * 1000) + 1;

		//准备输入
		Scanner s = new Scanner(System.in);
		int guest = -1;
#cold_bold		do{
#cold_bold			System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
#cold_bold			guest = s.nextInt();
#cold_bold			//判断:输入0,则中止
#cold_bold			if(guest == 0){
#cold_bold				break;
#cold_bold			} else if(guest > num) {
#cold_bold				System.out.println("太大了!");
#cold_bold			} else if(guest < num){
#cold_bold				System.out.println("太小了!");
#cold_bold			}
#cold_bold		}while(guest!=num);
}
}

步骤四:游戏结束

如果用户猜测正确或者录入数字 0 中止游戏,则循环结束。在循环结束后,需要判断用户最后一次所录入的数字,如果猜测正确,则提示用户“恭喜,你猜对了!”;如果录入的为数字0 ,则提示用户“真遗憾,下次再挑战吧!”。最后将 scanner对象关闭,程序结束。代码如下所示:

import java.util.Scanner;
public class NumberGuessV03 {
	public static void main(String[] args) {
		//生成一个随机数作为猜测的结果
		int num = (int) (Math.random() * 1000) + 1;

		//准备输入
		Scanner s = new Scanner(System.in);
		int guest = -1;
		do{
			System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
			guest = s.nextInt();
			//判断:输入0,则中止
			if(guest == 0){
				break;
			} else if(guest > num) {
				System.out.println("太大了!");
			} else if(guest < num){
				System.out.println("太小了!");
			}
		}while(guest!=num);
#cold_bold//提示用户最终结果
#cold_bold		if(guest == num) {
#cold_bold			System.out.println("恭喜,你猜对了!");
#cold_bold		}else{
#cold_bold			System.out.println("真遗憾,下次再挑战吧!");
#cold_bold		}
#cold_bold		s.close();
}
}

2.4 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;
public class NumberGuessV03 {
	public static void main(String[] args) {
		//生成一个随机数作为猜测的结果
		int num = (int) (Math.random() * 1000) + 1;

		//准备输入
		Scanner s = new Scanner(System.in);
		int guest = -1;
		do{
			System.out.print("请输入你猜测的数字(1-1000),退出请按0:");
			guest = s.nextInt();
			//判断:输入0,则中止
			if(guest == 0){
				break;
			} else if(guest > num) {
				System.out.println("太大了!");
			} else if(guest < num){
				System.out.println("太小了!");
			}
		}while(guest!=num);
		
		//提示用户最终结果
		if(guest == num) {
			System.out.println("恭喜,你猜对了!");
		}else{
			System.out.println("真遗憾,下次再挑战吧!");
		}
		s.close();	
	}
}

3 随机加法运算器

3.1 问题

有加法运算器程序,其规则为:程序依次出 10 道加法题目,由用户输入题目的答案。用户每答完一道题,由系统提示结果:答错了或者答对了。10 道题目答完之后,系统计算得分并输出。如果用户希望提前结束,则可以输入-1提前退出。

本案例要求使用交互的方式实现此游戏,交互过程为:

1、程序开始,即出现一道加法题(两个加数均为0到99之间的随机整数),并提示用户输入该题目的答案(输入-1则会提前退出程序)。交互过程如图-7所示:

图-7

2、用户录入后,程序进行判断:如果用户录入的答案错误,则提示“Error!”;如果答案正确,则提示“Correct!”。然后给出下一道题目,并提醒用户继续答题。用户答完10道题目后,系统给出用户的得分并显示(每道题目10分),程序结束。交互过程如图-8所示:

图-8

3、如果用户录入 -1,则表示希望提前退出程序,系统将提示用户的分数,且程序结束。交互过程如图-9所示:

图-9

3.2 方案

此案例中,需要使用 for 循环产生 10 道加法题目。

在每次循环中,需要产生两个 0 到 99 之间的随机整数,作为加法题目的两个加数,并计算出正确答案;然后,输出题目,并提示用户进行答题,从而得到用户从界面所录入的数字。

得到用户的录入后,进行判断:如果用户录入的为-1,则需要提前退出循环;如果用户录入的答案错误,则提示“Error!”,并继续下一次答题;如果用户录入的答案正确,则提示“Correct!”,继续下一次答题。

循环结束后,计算用户的得分并输出,程序结束。注:用户得分的规则是,每答对一道题,得10分,满分为100分。

程序的流程如图-10所示:

图-10

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:定义类及 main方法

首先定义一个名为 AdditionTest的类,并在类中添加Java应用程序的主方法main,代码如下所示:

public class AdditionTest {
	public static void main(String[] args) {
	}
}

步骤二:准备

在main方法中,输出程序即将开始的提示信息,并实例化Scanner类,用于准备接收用户从控制台输入的数字,然后,声明变量 score 用于记载用户的得分。代码如下所示:

import java.util.Scanner;
public class AdditionTest {
	public static void main(String[] args) {
#cold_bold		System.out.println("将开始 10 次加法测试... ");
#cold_bold		Scanner scanner = new Scanner(System.in);
#cold_bold		//用于记载分数
#cold_bold		int score = 0;		
	}	
}

注意:此步骤中,需要导入java.util包下的Scanner类。

步骤三:构建循环

使用 for 语句,构建 10 次循环。

在循环中,使用 Math类的random 方法返回两个 0 到 1 之间的随机数(包含 0,不包含 1),然后将所产生的数值乘以 100,并取其整数部分,则可以生成两个 0 到 99 之间的随机整数(包含0,也包含 99),表示加法题目中的两个加数。

计算加法运算的结果,并输出题目,代码如下:

import java.util.Scanner;
public class AdditionTest {
	public static void main(String[] args) {
		System.out.println("将开始 10 次加法测试... ");
		Scanner scanner = new Scanner(System.in);
		//用于记载分数
		int score = 0;
#cold_bold		//构建 10 次循环
#cold_bold		for (int i=1;i<=10;i++) {
#cold_bold			//随机生成两个加数
#cold_bold			int a = (int) (Math.random() * 100);
#cold_bold			int b = (int) (Math.random() * 100);
#cold_bold			int result = a + b;
#cold_bold			
#cold_bold			//输出需要计算的加法表达式
#cold_bold			System.out.println("(" + i + "). " + a + " + " + b + " = ?");
#cold_bold			System.out.print("请输入答案(输入-1退出): ");
#cold_bold    }
	}
}

步骤四:判断录入

得到用户的录入后,进行判断:如果用户录入的为-1,则需要提前退出循环;如果用户录入的答案错误,则提示“Error!”,并继续下一次答题;如果用户录入的答案正确,则提示“Correct!”,并计算用户的得分,然后继续下一次的答题。用户得分的规则是,每答对一题,得10分(满分为 100 分)。

代码如下所示:

import java.util.Scanner;
public class AdditionTest {
	public static void main(String[] args) {
		System.out.println("将开始 10 次加法测试... ");
		Scanner scanner = new Scanner(System.in);
		//用于记载分数
		int score = 0;
		//构建 10 次循环
		for (int i=1;i<=10;i++) {
			//随机生成两个加数
			int a = (int) (Math.random() * 100);
			int b = (int) (Math.random() * 100);
			int result = a + b;
			
			//输出需要计算的加法表达式
			System.out.println("(" + i + "). " + a + " + " + b + " = ?");
			System.out.print("请输入答案(输入-1退出): ");
#cold_bold			//读入结果
#cold_bold			int answer = scanner.nextInt();
#cold_bold			//判断对错
#cold_bold			if(answer == -1){
#cold_bold				break;
#cold_bold			}else if (answer != result) {				
#cold_bold				System.out.println("Error!");
#cold_bold				continue;
#cold_bold			} else {
#cold_bold				score += 10;
#cold_bold				System.out.println("Correct!");
#cold_bold			}			
		}
	}	
}

步骤五:输出结果

最后,需要将scanner对象关闭,并输出结果,代码如下所示:

import java.util.Scanner;
public class AdditionTest {
	public static void main(String[] args) {
		System.out.println("将开始 10 次加法测试... ");
		Scanner scanner = new Scanner(System.in);
		//用于记载分数
		int score = 0;
		//构建 10 次循环
		for (int i=1;i<=10;i++) {
			//随机生成两个加数
			int a = (int) (Math.random() * 100);
			int b = (int) (Math.random() * 100);
			int result = a + b;
			
			//输出需要计算的加法表达式
			System.out.println("(" + i + "). " + a + " + " + b + " = ?");
			System.out.print("请输入答案(输入-1退出): ");
			//读入结果
			int answer = scanner.nextInt();
			//判断对错
			if(answer == -1){
				break;
			}else if (answer != result) {				
				System.out.println("Error!");
				continue;
			} else {
				score += 10;
				System.out.println("Correct!");
			}			
		}
#cold_bold		scanner.close();
#cold_bold		System.out.println("此次测验结束,你的分数是:" + score);
	}	
}

3.4 完整代码

本案例的完整代码如下所示:

import java.util.Scanner;
public class AdditionTest {
	public static void main(String[] args) {
		System.out.println("将开始 10 次加法测试... ");
		Scanner scanner = new Scanner(System.in);
		//用于记载分数
		int score = 0;
		//构建 10 次循环
		for (int i=1;i<=10;i++) {
			//随机生成两个加数
			int a = (int) (Math.random() * 100);
			int b = (int) (Math.random() * 100);
			int result = a + b;
			
			//输出需要计算的加法表达式
			System.out.println("(" + i + "). " + a + " + " + b + " = ?");
			System.out.print("请输入答案(输入-1退出): ");
			//读入结果
			int answer = scanner.nextInt();
			//判断对错
			if(answer == -1){
				break;
			}else if (answer != result) {				
				System.out.println("Error!");
				continue;
			} else {
				score += 10;
				System.out.println("Correct!");
			}			
		}
		scanner.close();
		System.out.println("此次测验结束,你的分数是:" + score);
	}	
}