数据结构与算法分析-第一章Java类(04)

数据结构与算法分析—C语言描述 pdf 阅读详情

定义一个名为GenericCoin的类表示一枚没有面值也没有名字的硬币。这枚硬币应该有一个顶面与一个底面,并且可以标明哪一面朝上。应该能够抛掷这枚硬币使之随机掉落,或者顶面朝上,或者底面朝上。

a.编写一个程序将两枚硬币各抛掷50次。记录并报告每枚硬币各有多少次顶面朝上,报告那一枚硬币顶面朝上的次数多

b.编写一个程序来玩一个简单的抛硬币游戏。要求用户猜测隐蔽会是顶面还是底面朝上,然后跑硬币,并将结果告诉用户,宣告用户的猜测是否正确,并将结果裂成表格。用户可以持续的玩这个游戏,想玩多久就玩多久。当用户退出时,显示一个游戏总结,包括:抛硬币的次数,顶面朝上的次数,底面朝上的次数,猜测正确的次数,和猜测正确的百分比。并可以应用户要求以图形演示每次抛硬币的结果。

GenericCoin类,非常简单,里面有个方法cast表示抛一次硬币动作,用了java里的随机数和取绝对值操作(防止出现负数),这里用了枚举类表示硬币的正面和反面

package com.crazycoder2010.datastructure.ch01;

import java.util.Random;

public class GenericCoin {
	//表示硬币的正面和反面
	public static enum FACE{
		FONT,BACK;
	}
	private FACE face;
	public FACE getFace() {
		return face;
	}
	public void cast(){
		int index = 1;
		Random random = new Random();
		index = random.nextInt()%2;
		this.face = FACE.values()[Math.abs(index)];
	}
}
测试称许a-模拟两个硬币一起抛做数据对比

package com.crazycoder2010.datastructure.ch01;

import com.crazycoder2010.datastructure.ch01.GenericCoin.FACE;

public class GenericCoinTest {
	public static void main(String[] args) {
		GenericCoin coin1 = new GenericCoin();
		int index1 = countFace(coin1,50);
		GenericCoin coin2 = new GenericCoin();
		int index2 = countFace(coin2,50);
		System.out.println("Coin 1:"+index1);
		System.out.println("Coin 2:"+index2);
	}
	
	private static int countFace(GenericCoin coin,int times){
		int total = 0;
		for(int i = 0;i < times;i++){
			coin.cast();
			if(coin.getFace() == FACE.FONT){
				total++;
			}
		}
		return total;
	}
}
这个称许的输出结果为:

Coin 1:23
Coin 2:21

测试程序b-提供ui界面给用户,这里用的是jframe

package com.crazycoder2010.datastructure.ch01;

import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import com.crazycoder2010.datastructure.ch01.GenericCoin.FACE;

public class GenericCoinTestUI extends JFrame {
	private static int index = 0;
	private List<Guess> results = new ArrayList<Guess>();// 保存所有猜测结果
	private Map<FACE, Integer> actual = new HashMap<FACE, Integer>();//实际硬币展示的数量,key:正面/反面,value:对应的硬币正面或反面出现的次数
	private static final long serialVersionUID = 2948063316297165651L;

	public GenericCoinTestUI() throws HeadlessException {
		super();
		setTitle("抛硬币游戏");
		setSize(500, 550);
		setResizable(false);
		this.getContentPane().setLayout(new FlowLayout());
		//游戏开始之前反面/正面出现的实际次数都为0
		actual.put(FACE.FONT, 0);
		actual.put(FACE.BACK, 0);
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				StringBuffer message = new StringBuffer("----游戏总结----\n");
				message.append("猜测总次数:").append(results.size()).append("\n");
				message.append("正面次数:").append(actual.get(FACE.FONT)).append("\n");
				message.append("反面次数:").append(actual.get(FACE.BACK)).append("\n");
				int success = doSummarySuccess(results);
				message.append("猜中次数:").append(success).append("\n");
				message.append("猜中百分比:").append(Float.valueOf(success)*100/results.size()).append("%\n");
				JOptionPane.showMessageDialog(null, message);
				System.exit(0);
			}
		});

		final AbstractTableModel tableModel = new MyTable(this.results);
		JTable table = new JTable(tableModel);
		JScrollPane scrollPane = new JScrollPane(table);
		
		
		final JComboBox<String> faces = new JComboBox<String>();
		faces.addItem("正面");
		faces.addItem("反面");
		this.getContentPane().add(faces);
		JButton throwButton = new JButton("猜猜");
		this.getContentPane().add(throwButton);
		final JLabel label = new JLabel();
		this.getContentPane().add(label);
		throwButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				GenericCoin coin = new GenericCoin();
				coin.cast();
				actual.put(coin.getFace(), actual.get(coin.getFace())+1);
				Guess guess = new Guess(++index, FACE.values()[faces
						.getSelectedIndex()],
						coin.getFace() == FACE.values()[faces
								.getSelectedIndex()]);
				results.add(guess);
				label.setText(guess.isRight()?"猜中了!":"没猜中!");
				tableModel.fireTableDataChanged();
			}
		});
		
		this.getContentPane().add(scrollPane);
	}

	public static void main(String[] args) {
		new GenericCoinTestUI().setVisible(true);
	}
	
	private int doSummarySuccess(List<Guess> guesses){
		int total = 0;
		for(Guess guess : guesses){
			if(guess.isRight()){
				total++;
			}
		}
		return total;
	}

	private static class MyTable extends AbstractTableModel {
		private String[] header = { "索引", "猜测", "猜中" };
		private List<Guess> guesses;
		private MyTable(List<Guess> guesses){
			this.guesses = guesses;
		}
		@Override
		public int getRowCount() {
			return guesses.size();
		}
		@Override
		public String getColumnName(int column) {
			return header[column];
		}
		@Override
		public int getColumnCount() {
			return header.length;
		}
		@Override
		public Object getValueAt(int rowIndex, int columnIndex) {
			Guess guess = guesses.get(rowIndex);
			if(columnIndex == 0){
				return guess.getIndex();
			}else if(columnIndex == 1){
				return guess.getFace();
			}else if(columnIndex == 2){
				return guess.isRight();
			}
			return null;
		}
	}

	private static class Guess {//这个类表示用户的一次猜测行为
		private int index;//猜测的索引,第一次猜猜,第二次猜测。。。
		private FACE face;//用户猜测的硬币面-正面或反面
		private boolean right;//这次猜测活动用户是否猜中

		public Guess(int index, FACE face, boolean right) {
			this.index = index;
			this.face = face;
			this.right = right;
		}

		public int getIndex() {
			return index;
		}

		public FACE getFace() {
			return face;
		}

		public boolean isRight() {
			return right;
		}
	}
}
看一下运行结果界面:




《数据结构与算法分析—C语言描述》pdf 下载地址:网盘下载 内容简介 编辑 《数据结构与算法分析:C语言描述(原书第2版)》内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括。由于《数据结构与算法分析:C语言描述(原书第2版)》选材... 阅读详情

相关推荐

数据结构与算法分析(java语言描述) 部分课后习题答案 第一章

1.6 编写带有下列声明的

大宝 1万+

java设计并实现MonetaryCoin类,声明变量保存硬币的值,添加方法返回硬币面值,随机抛若干硬币,计算所有正面朝上硬币面值的和

一. 题目要求 java设计并实现MonetaryCoin类,声明变量保存硬币的值,添加方法返回硬币面值,随机抛若干硬币,计算所有正面朝上硬币面值的和。 二. 程序设计 Coin类 基类,有抛硬币的方法在构造器中,生成硬币对象时产生正反面。 MonetaryCoin类 声明变量保存硬币的值,添加方法返回硬币面值 test类 该类为测试类,根据题目要求,随机生成若干硬币并抛出,计算朝上的面额之和。...

weixin_42022728的博客 719

数据结构与算法分析——字谜问题实现

数据结构与算法分析 第一章课后习题答案第2题   一、问题描述:   二、解题思路:(针对的是字典不太大的情况) 1、单词表中的每个单词均可以用一个四元组(行,列,方向,长度)表示; 2、其中方向可分为四种:水平(包括向左、向右)、竖直(包括向上、向下)、右下(包括右下、左上)、左下(包括左下、右上); 3、找出每个方向上的最长字符串,以水平方向(向右)为例,最长字符串为:thi

wang8978的博客 2695

C语言编程之换硬币

现在有这样一道题。假设给你一分硬币两分,硬币五分,硬币共60枚。总共需要将它们兑换成100分的硬币,你有多少种换法? 而我们可以列出如下关系式 假设x,y,z分别为一分,两分,五分硬币则: x+y+z=60 x+2y+5z=100 对于这道题我们应该不太陌生,而我们最常见的应该是用三重循环来解决问题,又因为其为三重循环则需要三个未知数: 代码如下: #include<stdio.h> ...

niannianxi的博客 5096

深入探索Java中的数据结构与算法分析

本文还有配套的精品资源,点击获取 简介:《数据结构与算法分析——Java语言描述》详细介绍了数据结构和算法的基础知识,并结合Java语言的特点进行了深入讲解。书籍涵盖了从基础到高级的数据结构,如数组、链表、树和图,以及排序和查找等常用算法。书中还讨论了算法的时间复杂度和空间复杂度分析,以及递归、分治策略和贪心思想等编程技巧。通过Java实现这些概念,读者将提升编程技能和问题...

weixin_30205153的博客 912

Java语言实现的数据结构与算法分析课程

本文还有配套的精品资源,点击获取 简介:数据结构与算法分析是计算机科学的基础,本书通过Java语言深入讲解数据结构和算法的基本概念,结合图形示例和代码实践,帮助读者理解并应用这些概念。书中的内容包括数组、链表、栈、队列等常见数据结构,以及排序和查找等多种算法,并通过Java的类库支持,提供易于理解的实现示例。书中还包含实际的代码示例和图形示例,帮助读者加强理解。 ...

weixin_30600615的博客 788

Java类的编写实例(二) 抛硬币统计正反面出现的次数 谁先连续三次正面朝上的游戏 创建一个好的类可以在许多不同的程序中复用

创建一个模拟抛硬币的Coin类,实现随机抛掷硬币的方法,用随机数来表示硬币当前的状态,并能够根据这个值判断硬币是否正面朝上。 Coin对象可以是两种状态之一:正面朝上或反面朝上。我在Coin类中用整数值来表示这个状态,0表示正面朝上,1表示反面朝上(反之也不影响,因为实例调用的将是判断方法的返回值),这个值保存在变量face中。对于这个问题来说,可以用布尔值、字符串或者是枚举类型来表示硬币的状态,之所以选择使用整数来表示,是因为选择随机数的方法(本例采用的是Math.random)返回的是一个数值,所以避免

成名在望xy的博客 1790

数据结构与算法分析:全面学习指南

本文还有配套的精品资源,点击获取 简介:《数据结构与算法分析》系列由Allen Weiss所著,涵盖C、Java和C++三种编程语言,深入讲解了数据结构和算法的实现与应用。每种版本都对基础和高级数据结构如数组、链表、栈、队列、树、图和哈希表进行深入探讨,并结合各自语言的特点介绍排序和查找算法。书中还包括对面向对象编程的讨论,涉及Java中的集合框架以及C++特有的模板和ST...

weixin_42126677的博客 2005

java可视化执行小工具

实现一个简单的加法器,上代码 监听类 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; class Myclick ...

dzy_001的博客 6548

量子计算入门指南:密度算符的核心概念与应用解析

本文深入解析了量子计算中密度算符的核心概念与应用。作为描述量子系统“状态的状态”的关键数学工具,密度算符能有效处理混合态与子系统描述,是理解量子噪声、量子纠错和开放系统演化的基石。文章通过对比纯态与混合态,阐释了密度矩阵的数学定义与物理意义,并结合代码示例演示了其在实际量子计算问题中的强大威力。

day7的博客 469

【无人机对抗】基于matlab无人机红蓝对抗仿真【含Matlab源码 4436期】

无人机红蓝对抗仿真 完整代码,包运行;可提供运行操作视频!适合小白!

Matlab3024528700的博客 1378

python数据结构与算法分析 pdf_绝了!数据结构与算法分析,一线架构师仅用一份PDF搞定(赠送)...

很多开发者都知道“程序=数据结构+算法”这个著名的公式,并不真正明白算法的定义或概念。究竟什么是算法呢?从字面意义上理解,算法即用于计算的方法,通过这种方法可以达到预期的计算结果。实际上,数据结构与算法分析也是一个大学问,关于这一方面,我不得不感叹,一线架构师的水准是超出我们常人的想象,简直绝了!仅用一份PDF文档就能够搞定,说得非常清楚。当然,这份「数据结构与算法分析」的文档资料,是可以免费分享...

weixin_39790717的博客 3163

Ansys-结构动力学分析-圆柱斜齿轮模态分析学习心得

模态分析的步骤基本一直,不同点在于选择什么单元类型,模型,节点约束等 圆柱斜齿轮模态分析的难点在于圆柱斜齿轮的模型建立,和所要约束的节点的选择。 用命令流方法建立齿轮模型效率较高,当然,在ansys里建立复杂的模型实在不敢恭维,对于自下而上建模,需要知道每个关键点的坐标位置。下图是创建圆柱斜齿轮模型的命令流方式。 模型不同使用的数据也就不同了。 对于施加约束的问题这就必须要熟悉select e...

weixin_45385183的博客 1831

《数据结构与算法分析:Java语言描述》.pdf

关注“Java后端技术全栈”回复“面试”获取全套大厂面试资料程序=数据结构+算法这好比是软件工程师的“武林秘籍”。数据结构指的是数据与数据之间的逻辑关系;算法指的是解决特定问题的步骤和方...

田维常 6426

ANSYS Workbench对称分析进阶:手把手教你用Pre-Meshed Cyclic Region处理外部导入的复杂网格模型

本文详细介绍了ANSYS Workbench中Pre-Meshed Cyclic Region功能在处理外部导入复杂网格模型时的应用。通过循环对称分析技术,可显著减少计算资源消耗,特别适用于叶轮机械、齿轮组等周期性结构分析。文章深入解析了该功能的底层逻辑,并提供了从NASTRAN文件导入的离心压缩机叶轮案例,帮助工程师克服网格匹配难题。

weixin_28630185的博客 312

Synopsys工具filter命令:从数据筛选到高效IC设计的实战指南

在数字集成电路设计流程中,数据筛选与查询是工程师处理海量网表、时序报告和设计约束的核心需求。其原理在于通过声明式查询语言,直接对设计对象(如单元、网络、路径)的属性进行逻辑判断与模式匹配,从而精准定位目标。这种技术价值在于将工程师从繁琐的过程式脚本循环中解放出来,大幅提升代码可读性与运行效率,直接调用工具内置的高性能查询引擎。在实际应用场景中,它广泛用于物理与时序联合分析、层次化模块操作、动态约束生成以及自动化报告生成。本文聚焦于Synopsys工具链中filter命令的高阶用法,深入解析其表达式语法、正则

weixin_28007513的博客 577

《数据结构与算法分析》读书笔记:第一章 引 论

例如,给定一个2×10的矩形和一个5×5的矩形,哪个是更大的矩形呢?作为第二个例子,在一个字符串的数组中如果想要找出最大的串(即字典序排在最后的串),默认的compareTo不忽略字符的大小写,则“ZEBRA”按字典序排在“alligator”之前,这可能不是我们想要的。因为词典是有限的,所以实际上或者我们最终要查到一处,明白了此处解释中所有的单词(从而理解这里的解释,并按照查找的路径回查其余的解释)或者我们发现这些解释形成一个循环,无法理解其最终含义,或者在解释中需要我们理解的某个单词不在这本词典里。

Mr_Kian的博客 1282

【sap2000】部分模型通过.s2k文件合并模型generating a global model through partial models by .s2k text file

现在需要通过选项File → Import → SAP2000 .s2k Text File → Add to existing model(如果使用其中一个部分模型作为基础)或New model(如果使用新文件)添加部分模型,并使用以下导入选项。模型A(阶段1/5) Model A (Phase 1/5)模型B(阶段2/5) Model B (Phase 2/5)模型C(阶段3/5) Model C (Phase 3/5)模型E(阶段5/5) Model E (Phase 5/5)

hmywillstronger的博客 1748

浅谈数据结构与算法分析学习及如何进行算法分析

前言都说数据结构与算法分析是程序员的内功,想要理解计算机世界就不能不懂点数据结构与算法,然而这也备受争议,因为大多数的业务需求都用不上数据结构与算法,又或者说已经有封装好的库可以直接调用,例如Java中的ArrayList与LinkedList,直接调用add、remove等方法就已经可以完成插入删除等基本操作,实现业务逻辑,而无需关注其内部实现。如果说一样东西有没有用是根据用不用得上来衡量的话,那

纸上得来终觉浅 绝知此事要躬行 9314

STM32_DAC

DAC(Digital-to-Analog Converter,数模转换器)是将数字信号转换为模拟信号的外设,广泛应用于音频输出、波形生成、电机控制等场景。STM32F407 系列芯片配备了 2 个 DAC 通道(DAC1 和 DAC2),支持 12 位分辨率,支持多种触发方式,可输出稳定的模拟电压。本文从 DAC 的基本原理出发,详细讲解 STM32F407 DAC 的配置方法、代码实现、波形生成以及实际应用案例,帮助你快速掌握 DAC 的使用技巧。

轩宇的博客 1239

【应用】OpenClaw玩转有道云笔记

功能名称核心原理实操示例(直接复制可用)实操避坑+补充说明网页剪藏插件自动抓取网页正文、下载图片,通过 API 发送到你的有道云笔记,内联图片避免防盗链失效帮我把这个网页剪藏到云笔记:https://example.com/article1. 避坑:知乎、公众号等需登录的网站,先在浏览器登录再剪藏;2. 原理:自动过滤广告,只留正文;3. Twitter/X 剪藏需额外配置 APIFY_API_TOKEN(见1.2.4)创建笔记。

海兰 712

《Java语言程序设计与数据结构》编程练习答案(第一章)

java语言程序设计与数据结构 第十一版 编程答案

SWY's Workshop 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数据结构与算法java语言描述_数据结构与算法分析 Java语言描述(原书第3版)pdf...

数据结构与算法分析 Java语言描述(原书第3版) 内容简介本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具,讨论数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长。本书将算法分析与最有效率的Java程序的开发有机结合起来,深入分析每种算法,并细致讲解精心构造程序的方...

weixin_36202127的博客 1264

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据结构与算法分析张琨PDF_绝了!数据结构与算法分析,一线架构师仅用一份PDF搞定(赠送)...

很多开发者都知道“程序=数据结构+算法”这个著名的公式,并不真正明白算法的定义或概念。究竟什么是算法呢?从字面意义上理解,算法即用于计算的方法,通过这种方法可以达到预期的计算结果。实际上,数据结构与算法分析也是一个大学问,关于这一方面,我不得不感叹,一线架构师的水准是超出我们常人的想象,简直绝了!仅用一份PDF文档就能够搞定,说得非常清楚。当然,这份「数据结构与算法分析」的文档资料,是可以免费分享...

weixin_30801745的博客 542

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 数据结构与算法分析-第一章Java类(03)
下一篇: 数据结构与算法分析-第一章Java类(05)
CrazyCoder2010
博客等级 码龄16年 298粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值