Java:(游戏:豆机)

问题描述:

豆机,也称为梅花瓶或高尔顿瓶,它是一个用来做统计实验的设备,是用英国科学家瑟弗兰克斯高尔顿的名字来命名的。它是一个三角形状的均匀放置钉子(或钩子)的直立板子,如下图所示。
请添加图片描述
球都是从板子口落下的。每当球碰到钉子,它就有 50%的机会落向左边或落向右边。在板子底部的槽子中都会累积一堆球。编写程序模拟豆机。程序应该提示用户输入球的个数以及机器的槽数。打印每个球的路径模拟它的下落。例如:在图 b 中球的路径是LLRRLLR,而在图 c 中球的路径是 RLRRLRR。使用条形图显示橹中球的最终储备量。下面是程序的一个运行示例:请添加图片描述
提示:创建一个名为 slots 的数组。数组 slots 中的每个元素存储的是一个槽中球的个数。每个球都经过一条路径落入一个槽中。路径上 R 的个数表示球落下的槽的位置。例如:对于路径 LRLRLRR 而言,球落到 slots[4]中,而对路径 RRLLLLL 而言,球落到 slots[2]中。

代码:



import java.util.Random;
import java.util.Scanner;

public class Test20 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.print("Enter the number of balls to drop:");
		int balls_number = in.nextInt();					//定义小球数量
		System.out.print("Enter the number of slots in the bean machine:");
		int slots_number = in.nextInt();					//定义机器槽数
		String[][] track = new String[balls_number][slots_number-1];
		int[] position = new int[balls_number];				//定义数组存储小球最终位置,存储小球右偏次数
		
		track = trackOfBalls(balls_number,slots_number,position);
		int[] slots = resultOfSlots(slots_number,position);	//slots统计每个槽掉落的小球数
		printTrack(track);
		printOfSlots(balls_number,slots_number,slots);
		
		in.close();
	}
	
	//返回0表示左,1表示右
	public static int isLeftOrRight() {
		Random r = new Random();
		return r.nextInt(2);
	}
	
	//判断小球的下落情况
	public static String[][] trackOfBalls(int balls_number,int slots_number,int[] position){
		String[][] track = new String[balls_number][slots_number-1];	//定义数组存储小球下落轨迹
		
		for(int i = 0; i < balls_number; i++)					//外循环表示有多少个小球
		{
			for(int j = 0; j < slots_number - 1; j++)			//内循环表示每个小球的下落轨迹
			{
				if(isLeftOrRight() == 0)
				{
					track[i][j] = "L";
				}
				else
				{
					track[i][j] = "R";
					position[i]++;
				}
			}
		}
		return track;
	}
	
	//输出轨迹
	public static void printTrack(String[][] track) {
		for(int i = 0;i < track.length; i++)
		{
			for(int j =0; j < track[i].length; j++)
			{
				System.out.print(track[i][j]);
			}
			System.out.println();
		}
	}
	
	//统计每个槽掉落的小球数
	public static int[] resultOfSlots(int slots_number,int[] position) {
		int[] slots = new int[slots_number];		//slots统计每个槽掉落的小球数
		
		for(int i = 0; i < position.length; i++)
		{
			for(int j= 0; j < slots_number; j++)
			{
				if(j == position[i])
				{
					slots[j]++;
					break;
				}
			}
		}
		//for(int i=0;i<slots.length;i++)
		//	System.out.print(slots[i]+" ");
		//System.out.println();
		return slots;
	}
	
	//输出每个槽中小球的情况
	public static void printOfSlots(int balls_number,int slots_numbers,int[] slots) {
		for(int i = balls_number; i > 0; i--)
		{
			for(int j = 0; j < slots_numbers; j++)
			{
				if(slots[j] < i)
					System.out.print(" ");
				else
					System.out.print("O");
			}
			System.out.println();
		}
		
	}
	
}

运行截图:

请添加图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值