`
MouseLearnJava
  • 浏览: 467242 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 GB2312、GBK、GB18030,CP936以及CNS11643都满足条件 -- 中文是占用2个字节的,英文是占用1一个字节 。 中文编码资料: 中文字符编码简介 http://www.cftea.com/c/2008/03/140B5A561NFN51DS.asp 中文编码基础知识介绍 http://www.eygle.com/digest/2007/01 ...
本篇文章主要用来简单模仿走楼梯或者台阶,列出走完楼梯或者台阶所有的走法。 第一个程序:给定台阶数,每次走1步,2步或者3步。 第二个程序:给定台阶数据,每次走的最小台阶数,每次走的最大台阶数以及设定最多能走几次。采用Stack来实现。 第一个程序和运行结果如下: /** * 程序主要用来简单模仿走楼梯(台阶). 给定台阶数,每次走1步, 2步 或者 3步, 列出走完台阶所有的走法. * * 例如3级台阶就有四种走法: * 1 1 1 * 1 2 * 2 1 * 3 * * @author Eric * @version 1.0 * ...
本博文的程序实现对插入排序的可视化。具体的页面布局和之前的文章“可视化排序实践之冒泡排序”一致 (界面很简单就包括两个部分:界面左侧是可视化排序部分,右侧是冒泡排序的代码), 可视化排序实践之冒泡排序的博文请参考: http://mouselearnjava.iteye.com/blog/1860956 可视化排序实践之选择排序的博文请参考: http://mouselearnjava.iteye.com/blog/1861333 程序的关键点主要有两点: 1. 如何在页面上表示出排序程序的运行过程。 2. 如何将排序程序的运行过程和可视化排序结合起来,保持状态一致。 我的解决方法如下: ...
本博文的程序实现对选择排序的可视化。具体的页面布局和之前的文章“可视化排序实践之冒泡排序”一致 (界面很简单就包括两个部分:界面左侧是可视化排序部分,右侧是冒泡排序的代码), 可视化排序实践之冒泡排序的博文请参考http://mouselearnjava.iteye.com/blog/1860956 程序的关键点主要有两点: 1. 如何在页面上表示出排序程序的运行过程。 2. 如何将排序程序的运行过程和可视化排序结合起来,保持状态一致。 我的解决方法如下: 我采用了JList去模拟程序的执行,JList有一个setSelectedIndex的方法,能高亮显示指定的行。通过改变sele ...
如果排序过程和程序执行能结合起来,那么这个过程会更加直观。 本文简单地实现了冒泡排序的可视化。界面很简单就包括两个部分:界面左侧是可视化排序部分,右侧是冒泡排序的代码。如下图所示: 程序的关键点主要有两点: 1. 如何在页面上表示出排序程序的运行过程。 2. 如何将排序程序的运行过程和可视化排序结合起来,保持状态一致。 我的解决方法如下: 我采用了JList去模拟程序的执行,JList有一个setSelectedIndex的方法,能高亮显示指定的行。通过改变selectedIndex的值,能够达到模拟程序执行的效果。在这个过程中,记录下两个循环的索引状态值,根据这些状态值去调整可视化排 ...
有100盏灯,第一轮打开所有的灯, 第二轮隔一个把开着的灯关掉, 第三轮隔两个把开着的灯关掉,关掉的灯打开,这样进行100轮以后还剩余多少盏灯亮着? 答案:位置是平方数的10盏灯亮着。 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 , 100 /** * <p> * 有100盏灯,第一轮打开所有的灯, 第二轮隔一个把开着的灯关掉, 第三轮隔两个把开着的灯关掉,关掉的灯打开,这样进行100轮以后还剩余多少盏灯亮着? . * </p> * * @author Eric * */ public cla ...
从集合{1-9}中选择9个数字,每3个数字形成一个三位数,每个数字只允许使用一次。最后的要求是三个三位数的比值为1:2:3。如何查找出这样的组合? 分析: 1. 首先,确定第一个数字的范围,最小是123,最大是987/3 = 329 2. 其次,确定怎么判断三个数字是符合条件的。这里比较巧妙的就是将数字的比较转换成字符串的比较。比如:            num1 = 192 , num2 = 384 , num3 = 576, 符合条件的几个数字组合成字符串, 然后排序。排序后的结果如果是“123456789”, 那就是我们想要的。 这样的组合一共有四组: num1 = 192 , ...
1到9九个数字,每3个数字形成一个三位数,且都是完全平方数,每个数字只允许使用一次。求解。 分析: 1.       确定范围。1-9九个数,取其中三个不同的数组成的三位数最大是987,最小是123。 因为123>121(=11*11),144=12*12,4出现两次不符合条件,169=13*13,符合条件。所以一个数的平方最小是169,那么这个数是13。同理,得出大概的最大数为32。经过三次循环,可以得到三个三位数的不同结果集合。 2.       判断三个三位数是否是符合条件的数字。在这里将数字的比较转换成字符串的比较。 比如:            num1 = 3 ...
给定一个数据集合,把这些数据分成和相等的两堆,输出所有可能的结果。 比如: 源数据集合-->[7,6,5,4,3,2,1] 分成和相等的两堆数据,有如下几种情况! 第1种结果==> [7, 6, 1] 和 [5, 4, 3, 2] 第2种结果==> [7, 5, 2] 和 [6, 4, 3, 1] 第3种结果==> [7, 4, 3] 和 [6, 5, 2, 1] 第4种结果==> [7, 4, 2, 1] 和 [6, 5, 3] 思路: 1. 首先判断这个数据集合的和是不是偶数,只有偶数才能分成和一样的两堆数据。 2. 将数据集分成新的两个 ...
斐波那契数计算的方法一般采用递归的方法,返回类型一般采用int或者long类型。在这种条件下会产生两个问题: 1. 效率问题,比如计算第46个斐波那契数值,需要6秒多。计算第50个斐波那契数需要一分钟左右,后面越来越难以想象。 2. 数值溢出问题。返回类型采用int类型的话,最多可以计算出f(46) = 1836311903, 计算f(47)时就会产生溢出。返回类型采用long类型的话,最多可以计算出f(92) = 7540113804746346429, 计算f(93)时就会产生溢出。 解决效率问题的方法就是采用非递归的方式。 非递归的思想 当n =1 或者 n=2的时返回1。当n大于2时 ...
给定一个数字数组,设定一个目标值, 然后以这个数组为数据源,要求给出所有的子集,这些子集中数据的和要等于设定的目标值。例如: 数字数组: [1,2,3,4,5,6] 目标值为 7 那么,所有和为7的子集有[1,2,4] [3,4]...... import java.util.Stack; /** * 给定一个数字数组,设定一个目标值, 然后以这个数组为数据源,要求给出所有的子集,这些子集中数据的和要等于设定的目标值。 * * 例如: 数字数组: [1,2,3,4,5,6] 目标值为 7 那么,所有和为7的子集有[1,2,4] [3,4]...... * * 本例 ...

Java洗牌

    博客分类:
  • Java
如何得到一副洗过的牌的集合呢,如果用JAVA实现,最方便的就是调用Collections的方法shuffle来进行洗牌。一个很简单的随机产生纸牌的思路如下: 根据纸牌的张数(length),上千次产生0~ length-1的随机数,然后产生随机数对应位置的纸牌与第一张纸牌进行交换,经过上千次的交换,足以达到使纸牌乱序的效果。 该小程序能够产生一副或者多幅随即牌。 具体的程序如下. package cards.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; ...
看到一篇文章 【白话经典算法系列之十三】随机生成和为S的N个正整数——投影法  http://blog.csdn.net/morewindows/article/details/8439393 觉得思路挺好的。 参考这种思想,实现了Java版的随机生成和为S的N个正整数。 * 思路: *    第一步:把和为S的数值看做是一把尺子的长度,比如S等于20.那么随机产生和为S的N个整数的问题 *       就变成了在0~20之间产生N-1不同的刻度。这样的话,尺子就被不同的刻度分割成了N段。 *    第二步:从左到右,计算出每一段的长度,每一段的长度就可以看做是随机数。N段就有 ...
List为移除数据提供了两个remove的方法: 1. 按照下标索引删除 2. 按照值删除,删除第一个符合的值对象。 public interface List<E> extends Collection<E> { //省略其它方法,只保留remove方法 /** * Removes the first occurrence of the specified element from this list, * if it is present (optional operation). If this list does n ...
问题:在一个长为33厘米的光滑凹轨上,在第3厘米、第6厘米、第19厘米、第22厘米、第26厘米处各有一个钢珠,凹轨很细,不能同时通过两个钢珠,开始时,钢珠运动方向是任意的。两个钢珠相撞后,以相同速度反向运动。假设所有钢珠初始速度为每秒运动1厘米,那么所有钢珠离开凹轨的最短和最长时间是多少? 分析:5个钢珠的移动方向都有两种可能:向左或者向右。这样钢珠运动的组合就有2的5次方,也就是32种。 最少时间是:14 最大时间是:30 第1种情况的初始方向是:  Left  Left  Left  Left  Left -- 花费的时间是:26 第2种情况的初始方向是:  Right  ...
Global site tag (gtag.js) - Google Analytics