??xml version="1.0" encoding="utf-8" standalone="yes"?>
背景Q?br /> 斐LU_数列QF(tun)ibonacci SequenceQ,又称黄金分割数列Q指的是q样一个数列:(x)1??????3?1?#8230;…在数学上Q斐波纳契数列以如下被以递归的方法定义:(x)F0=0QF1=1QFn=F(n-1)+F(n-2)Qn>=2Qn∈N*Q?br />
两种Ҏ(gu)实现
1Q递归
2Q遍?br />
CZQ?/span>
for(int num=0;num<10;num++){
System.out.println(num+" "+fobin(num));
}
递归
//演算为目的,所以选用int
private int fobin(int n) {
if(n==0)
return 0;
if(n==1)
return 1;
return fobin(n-1)+fobin(n-2);
}
遍历
private int lastFobinListValue(List<Integer> list) {
final int LEN=list.size();
final int lastNum=LEN-1;
final int THE_N=list.get(lastNum);
return THE_N;
}
private List<Integer> fobinList(List<Integer> list,int n) {
for(int i=2;i<n;i++){
int last=list.get(i-2);
int next=list.get(i-1);
int num=last+next;
list.add(new Integer(num));
}
return list;
}
private List<Integer> initFobinList() {
final int N1=1;
final int N2=1;
List<Integer> list=new ArrayList<Integer>();
list.add(new Integer(N1));
list.add(new Integer(N2));
return list;
}
private int fobin(int n) {
if(n==0)
return 0;
if(n==1)
return 1;
/**
int first=0;
int next=1;
int count=0;
for(int i=1;i<n;i++){
count=first+next;//(n-2)+(n-1)
first=next; //0->1
next=count; //1->1
}
return count;
*/
List<Integer> baseList=initFobinList();
List<Integer> fullFobinList=fobinList(baseList,n);
final int THE_N=lastFobinListValue(fullFobinList);
return THE_N;
}
]]> String str="abc好吗d";
int byteCount=6;
String newStr=split(str,byteCount);
System.out.println(str);
System.out.println(byteCount);
System.out.println(newStr);
功能模块Q?/span>
/**
* U除截取的字节中的一个汉字单字节
*/
private byte[] removeInvalidByte(byte[]byteArray){
int newLen=byteArray.length-1;
byte[]newByteArray=Arrays.copyOf(byteArray,newLen);
return newByteArray;
}
/**
* 查找截取的字节中是否保留了一个汉字的单字?br />
*/
private boolean haveFullChineseByte(byte[]byteArray){
int count=0;
for(byte word:byteArray){
if(word<0){
count++;
}
}
boolean isFull=(count%2!=0);
return isFull;
}
private byte[] getSplitBytes(String str,int byteCount){
byte byteArray[]=str.getBytes();
byte newByteArray[]=Arrays.copyOf(byteArray,byteCount);
/**
for(int i=0;i<byteCount;i++){
byte word=byteArray[i];
newByteArray[i]=word;
}
*/
return newByteArray;
}
/**
* 截取一个字W串中指定长度的字节Q如果最后一位ؓ(f)一个汉字的单字节则q行忽略Q?br />
*/
private String split(String str,int byteCount){
byte newByteArray[]=getSplitBytes(str,byteCount);
if(haveFullChineseByte(newByteArray)){
newByteArray=removeInvalidByte(newByteArray);
}
String newStr=new String(newByteArray);
return newStr;
}
]]>
]]>
需求:(x)
Q一Q对指定日期Q两U方式)来进行求?br />
1 java.util.Date
2 直接输入q、月、日
功能列表Q?br />
Q一Q获得指定日期在一个星期中的天?br />
----------------------------------
q个功能可以从一个日历类Qjava.util.CalendarQ得刎ͼ所以可以重用?br />
1 Z使用该功能必L造一个日历类Q所以必L输入方式Q?U)包装成日历类
2 自然是调用日历类提供的方法来完成求?br />
设计Q?br />
DateCommon
public getDayOfWeekQyearQintQmonthQintQdateQintQ:(x)int
public getDayOfWeekQdateQjava.util.DateQ:(x)int
代码Q?br />
import java.util.Calendar;
import java.util.Date;
class DateCommon {
/**
* 通过指定DateQjava.util.DateQ构造CalendarQjava.util.CalendarQ?br />
*
* @param date
* 指定的日?br />
* @return
*/
private Calendar createCalendar(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
/**
*通过指定日期构造CalendarQjava.util.CalendarQ?br />
*
* @param yearq?br />
* @param month?br />
* @param date?br />
* @return
*/
private Calendar createCalendar(int year, int month, int date) {
Calendar calendar = Calendar.getInstance();
// Calendar中的月䆾和实际月份时间相差ؓ(f)1Q它?月䆾?Q?/span>
month = month - 1;
calendar.set(year, month, date);
return calendar;
}
/** */
/**
* 获得java.util.Calendar中的日期在一个星期中的天?br />
*/
private int getCalendarDayOfWeek(Calendar calendar) {
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
return dayOfWeek;
}
/** */
/**
*获得 java.util.Date中的 指定日期在一个星期中的天?br />
*/
public int getDayOfWeek(Date date) {
// 构造指定日?/span>
Calendar calendar = createCalendar(date);
return getCalendarDayOfWeek(calendar);
}
/** */
/**
*获得指定日期在一个星期中的天?br />
*/
public int getDayOfWeek(int year, int month, int date) {
// 构造指定日?/span>
Calendar calendar = createCalendar(year, month, date);
return getCalendarDayOfWeek(calendar);
}
/** */
/**
* 业务入口
*/
public void service() {
System.out.println(getDayOfWeek(2010, 8, 1));
}
}
主要是练?fn)一?#8220;正规”Q我理解Q的完成一个功能,暂时忽略?u>健壮?/u>Q?/span>
]]> String tests[] = {
"aaaa", "bbbb", "aaaa"
};
Analysis < String > an = new Analysis < String > (tests);
//an.add("aaaa");
//an.add("bbbb");
//an.add(111);
System.out.println(an.isOnlyOne());
/**
*处理重复?nbsp;
*/
class Analysis < T > {
private Set < T > temp = new HashSet < T > ();
private int count = 0;
public Analysis(){
}
public Analysis(T
t){
temp = new HashSet < T > (Arrays.asList(t));
count = t.length;
}
/**
*d数据
*/
public void add(T t){
temp.add(t);
count++;
}
/**
*查是否有重复?nbsp;
*/
public boolean isOnlyOne(){
//容器的实际大?nbsp;
int containerSize = temp.size();
return count == containerSize;
}
}
]]>int nums[] = {
3, 1, 3, 6, 4, 2
};
scanIndexNumber(nums);
nums = new int[]{
3, 6
};
scanIndexNumber(nums);
/**
*扫描q箋敎ͼ先验证重复,后验证连l数Q?nbsp;
*/
public void scanIndexNumber(int[] nums){
//判断重复数和有效数组长度
if (!isNumberOnlyOne(nums) || nums.length == 1)
System.out.println("数据不合?");
else{
//q回数组中的最大值和最?nbsp;
int[] MinAndMax = scanArrayNumberMinAndMax(nums);
//最?nbsp;
int min = MinAndMax[0];
//最大?nbsp;
int max = MinAndMax[1];
//原始数组的长?nbsp;
int argsArrayLen = nums.length;
checkIndexNumber(argsArrayLen, min, max);
}
System.out.println();
}
/**
*求出数组中的最和最大|q回的结果是一个数l。第一个数是最|W二个是最大倹{?nbsp;
*/
public int[] scanArrayNumberMinAndMax(int[] nums){
//最?nbsp;
int min = nums[0];
//最大?nbsp;
int max = nums[0];
for (int num: nums){
//求最大?nbsp;
if (min > num)
min = num;
//求最大?nbsp;
if (max < num)
max = num;
}
int[] result = new int[]{
min, max
};
return result;
}
/**
*验证是否有重复数
*/
public boolean isNumberOnlyOne(int[] nums){
//消除重复数据
Set < Integer > s = new HashSet < Integer > ();
for (int num: nums){
s.add(num);
}
//原始数组的长?nbsp;
int argsArrayLen = nums.length;
//不重复的数组个数
int arrayLen = s.size();
return argsArrayLen == arrayLen;
}
/**
*验证q箋?nbsp;
*/
public void checkIndexNumber(int argsArrayLen, int min, int max){
//理论上的q箋数的L
int numLen = max - min + 1;
//判断是否l数
if (argsArrayLen == numLen){
System.out.println("数组的个? " + argsArrayLen);
System.out.println("理论上的q箋数的L= " + numLen);
System.out.println("Bing Go!");
}
else
System.out.println("非连l数!");
}
]]>
.
2
3/**
4 *求素敎ͼ采用{选法Q即把每个自然数的的U求出来攑օBitSet集合中,然后遍历
5 *每个集合的烦引(自然数的U)中ؓ(f)false的位?nbsp;
6 */
7 public void TestNum(){
8 BitSet b = new BitSet();
9
10 //40以内的数
11 int len = 40;
12
13 //BitSet判断位,用于是否完成填?nbsp;
14 boolean isover = false;
15
16 for (int i = 2; i <= len && !isover; i++){
17
18 isover = true;
19
20 for (int j = i - 1; (i * j) <= len; j++){
21
22 if (!b.get(i * j)){
23 System.out.print(i * j + " ");
24
25 b.set(i * j);
26
27 isover = false;
28 }
29 }
30 System.out.println();
31 }
32
33 System.out.print("[ ");
34
35 for (int i = 1; i < b.length(); i++){
36 if (!b.get(i))
37 System.out.print(i + " ");
38 }
39
40 System.out.print("]");
41 }
42
]]>
public int[] run(int[]num){
int temp[]=new int[num.length];
Arrays.sort(num);
int max=num.length-1;
for(int i=0;i<num.length;i+=2){
//0,4;1,0
//2,3;3,1
//4 2;
//0,5;1,0
//2,4;3,1
//4,3;5,2
temp[i]=num[max]; //最大?br />
if(i==(num.length-1))
break;
temp[i+1]=num[i/2]; // 最?nbsp;
max--;
}
return temp;
}
class Queen{
private final Object objects[]=new Object[10];
private int pushIndex=0;
private int popIndex=0;
public synchronized void push(Object object){
if(pushIndex>=objects.length){
System.out.println(Thread.currentThread().getName()+" queen is over,push fail!");
}else
objects[pushIndex++]=object;
}
public synchronized Object pop(){
if(popIndex>=objects.length){
System.out.println(Thread.currentThread().getName()+" queen is empty,pop fail!");
}else{
Object object=objects[popIndex];
objects[popIndex++]=null;
Thread.yield();
return object;
}
return null;
}
}
class QueenThread implements Runnable{
private static int id=0;
private Queen queen;
public QueenThread(Queen queen){
this.queen=queen;
}
public void run(){
String object=null;
for(int i=0;i<10;i++){
queen.push(Thread.currentThread().getName()+" "+id);
id++;
try{
Thread.sleep(2000);
}catch(InterruptedException e){
e.printStackTrace();
}
object=(String)queen.pop();
if(object!=null)
System.out.println(Thread.currentThread().getName()+" |"+object);
}
}
}
//工厂
class Test{
public void run(){
Queens queen=new Queens();
QueenThread qt=new QueenThread(queen);
new Thread(qt).start();
new Thread(qt).start();
System.out.println("Len= "+queen.getQueens().size());
}
public static void main(String[]args){
new Test().run();
}
}
//生~存
class Queens{
private List buffList=null;
private final List queenList=new ArrayList();
public Queens(){
init();
}
public void init(){
int i=0;
for(int len=0;len<2;len++){
buffList=new ArrayList();
for(;i<(len+1)*3;i++){
buffList.add(String.valueOf(i+1));
}
queenList.add(buffList);
}
}
public synchronized void deleteQueen(int index){
queenList.remove(index);
}
public List getQueens(){
return queenList;
}
public int getLen(){
return queenList.size();
}
}
//处理队列~存
class QueenThread implements Runnable{
private static int id=0;
private Queens queen;
public QueenThread(Queens queen){
this.queen=queen;
}
private ThreadLocal tl=new ThreadLocal(){
protected Integer initialValue(){
return new Integer(id++);
}
};
public void run(){
int currentId=((Integer)(tl.get())).intValue();
List queenList=(List)queen.getQueens().get(currentId);
for(int i=0;i<queenList.size();i++){
System.out.println(Thread.currentThread().getName()+" "+(String)queenList.get(i));
try{
Thread.sleep(2000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+" ID= "+currentId);
}
}
System.currentTimeMillis()
q个Ҏ(gu)Q这个不是可以最直接的反映时间吗Q比hashCode更直观?br />
最后感觉这个比较简陋,以后再修攏V?br />
public class CancelNumber{
private String inFile;
private String outFile;
public CancelNumber(){
}
public CancelNumber(String inFile,String outFile){
this.inFile=inFile;
this.outFile=outFile;
}
public void test(){
BufferedReader in;
BufferedWriter out;
try{
in=new BufferedReader(new FileReader(inFile));
out=new BufferedWriter(new FileWriter(outFile));
StringBuffer sb=new StringBuffer();
String context;
int i=1;
while((context=in.readLine())!=null&&context.length()!=0){
String temp=getCode(context);
sb.append(temp);
}
out.write(sb.toString().trim());
in.close();
out.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
public String getCode(String context){
context=context.trim();
int index=0;
int asc=0;
for(int i=0;i<context.length();i++){
asc=(int)context.charAt(i);
if(!(asc>=48&&asc<=57)){
index=i;
break;
}
}
if(index==0&&asc<65)
context=""; //L只有数字的行,字母最的ASCIIgؓ(f)65(a)
else
context=context.substring(index)+"\n"; //L开头的数字(正常程)
return context;
}
public static void main(String[]args){
String inFile=args[0];
String outFile=args[1];
new CancelNumber(inFile,outFile).test();
}
}