类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
import java.io.*;
import java.lang.
public class fsearch{
public static int Max=20;
public static int[] Data=
{
12,16,19,22,25,
32,39,48,55,57,
58,63,68,69,70,
78,84,88,90,97
};
public static int Counter=1;
public static void main(String args[]){
int FinA;
FinA=1;
int KeyValue;
while(Fib(FinA)<=Max){
FinA++;
}
System.out.print("Please enter your key value :");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try{
KeyValue=Integer.parseInt(br.readLine());
}catch(IOException e){
}
if(FibonacciSearch(FinA,KeyValue)){
System.out.println("");
System.out.println("Search Time ="+Counter);
}
else{
System.out.println("");
System.out.println("No Found!!");
}
}
//------------------------------------------------------------
//
//------------------------------------------------------------
public static int Fib(int N){
if(N<=1)
return N;
else
return Fib(N-1)+Fib(N-2);
}
//------------------------------------------------------------
//
//------------------------------------------------------------
public static boolean FibonacciSearch(int n,int KeyValue){
int Root;
int Distance_1;
int Distance_2;
int Temp;
Root=Fib(n-1);
Distance_1=Fib(n-2);
Distance_1=Fib(n-3);
do{
if(KeyValue<Data[Root-1]){
Root=Root-Distance_2;
Temp=Distance_1;
Distance_1=Distance_2;
Distance_2=Temp-Distance_2;
}
else if(KeyValue>Data[Root-1]){
Root=Root+Distance_2;
Distance_1=Distance_1-Distance_2;
Distance_2=Distance_2-Distance_1;
}
else if(KeyValue==Data[Root-1]){
System.out.println("Data["+(Root-1)+"]="+Data[Root-1]);
return true;
}
Counter++;
}while(Distance_2>=0);
return false;
}
}
网友回答:
int KeyValue;没有指定初值,如果KeyValue=Integer.parseInt(br.readLine())抛出异常怎么办,而且少打出一条出错日志,无法得知KeyValue=Integer.parseInt(br.readLine())是否抛出异常
不像全局变量,局部变量申明时就要初始化。
如果循环体内都不满足条件,那么Distance_2就没有被赋值,“while(Distance_2>=0)”就会出错了
没初始化,,要是 try{
KeyValue=Integer.parseInt(br.readLine());
}catch(IOException e){
}
抛出异常了,,!!!???