- 浏览: 467242 次
- 性别:
- 来自: 杭州
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
simpleDean 写道请问,Logger.setLevel ...
Java内置Logger详解 -
sunwang810812:
我运行了这个例子,怎么结果是这样的:2号车泊车6号车泊车5号车 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
jp260715007:
nanjiwubing123 写道参考你的用法,用如下方式实现 ...
面试题--三个线程循环打印ABC10次的几种解决方法 -
cb_0312:
SurnameDictionary文章我没看完,现在懂了
中文排序
文章列表
截取中英文混合字符串
- 博客分类:
- Java
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我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时 ...
根据数组数据,得到和一定的所有子集
- 博客分类:
- Java
给定一个数字数组,设定一个目标值, 然后以这个数组为数据源,要求给出所有的子集,这些子集中数据的和要等于设定的目标值。例如: 数字数组: [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实现,最方便的就是调用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 ...