我把我详细的算法程序的前半段贴出来。该算法里头,rs 可以搜索到与参数 Keyword 相关的问题分类,rsc 可以搜索到所有分类,算法的前半部分就是要把两者进行匹配然后统计:int Max=0,Counter=0;
public String[] BestChoice(String Keyword){
Search SS=new Search();
dbConnect DB=new dbConnect();
dbConnect DBC=new dbConnect();
try{
String SqlStr="Select Subclass from [Question] where ";
SqlStr=SqlStr+SS.Similar(Keyword, false);
ResultSet rs=DB.ExecuteQuery(SqlStr); //搜索相关问题的分类
int SimCount=0;
while(rs.next()){
SimCount++; //统计总数
}
rs.beforeFirst();
System.out.println("相关问题分类共 "+SimCount+" 个");
String[] Class=new String[SimCount];
ResultSet rsc=DBC.ExecuteQuery("Select Subclass from [Class]"); //搜索所有分类
int Count=0;
while(rsc.next()){
Count++; //统计总数
System.out.println("所有分类 "+Count+":"+rsc.getString("Subclass"));
}
rsc.beforeFirst();
System.out.println("所有分类共 "+Count+" 个");
int[] Num=new int[Count];
for(int i=0;i<Count;i++){
Num[i]=0; //初始化计数数组
}
int i=0;
while(rsc.next()){
Class[i]=rsc.getString("Subclass"); //先对所有分类进行逐行扫描
while(rs.next()){
if(Class[i].equals(rs.getString("Subclass"))){ //如果该分类与某相关问题分类匹配
Num[i]++; //则该分类的统计值加 1
System.out.println("分类 "+Class[i]+" 与 "+rs.getString("Subclass")+" 匹配");
}
else System.out.println("分类 "+Class[i]+" 与 "+rs.getString("Subclass")+" 不匹配");
}
rs.beforeFirst();
i++;
}
……而执行结果是:相关问题分类共 3 个
所有分类 1:奥运
所有分类 2:篮球
所有分类 3:实况足球
所有分类 4:足球
所有分类共 4 个
分类 奥运 与 足球 不匹配
分类 奥运 与 足球 不匹配
分类 奥运 与 足球 不匹配
分类 篮球 与 足球 不匹配
分类 篮球 与 足球 不匹配
分类 篮球 与 足球 不匹配
分类 实况足球 与 足球 不匹配
分类 实况足球 与 足球 不匹配
分类 实况足球 与 足球 不匹配大家看看,明明 rsc 指针可以找到 4 个分类,但是再循环进行分类匹配计算的时候却只出现了前面的三个!!!最后一个没了!!!到底是怎么回事?我明明循环语句写的是 while(rsc.next()){……} 啊,在我其它所有的程序里,这种语句向来都是数据库每行全走的,为什么一到这里就在倒数第二行停住了???
public String[] BestChoice(String Keyword){
Search SS=new Search();
dbConnect DB=new dbConnect();
dbConnect DBC=new dbConnect();
try{
String SqlStr="Select Subclass from [Question] where ";
SqlStr=SqlStr+SS.Similar(Keyword, false);
ResultSet rs=DB.ExecuteQuery(SqlStr); //搜索相关问题的分类
int SimCount=0;
while(rs.next()){
SimCount++; //统计总数
}
rs.beforeFirst();
System.out.println("相关问题分类共 "+SimCount+" 个");
String[] Class=new String[SimCount];
ResultSet rsc=DBC.ExecuteQuery("Select Subclass from [Class]"); //搜索所有分类
int Count=0;
while(rsc.next()){
Count++; //统计总数
System.out.println("所有分类 "+Count+":"+rsc.getString("Subclass"));
}
rsc.beforeFirst();
System.out.println("所有分类共 "+Count+" 个");
int[] Num=new int[Count];
for(int i=0;i<Count;i++){
Num[i]=0; //初始化计数数组
}
int i=0;
while(rsc.next()){
Class[i]=rsc.getString("Subclass"); //先对所有分类进行逐行扫描
while(rs.next()){
if(Class[i].equals(rs.getString("Subclass"))){ //如果该分类与某相关问题分类匹配
Num[i]++; //则该分类的统计值加 1
System.out.println("分类 "+Class[i]+" 与 "+rs.getString("Subclass")+" 匹配");
}
else System.out.println("分类 "+Class[i]+" 与 "+rs.getString("Subclass")+" 不匹配");
}
rs.beforeFirst();
i++;
}
……而执行结果是:相关问题分类共 3 个
所有分类 1:奥运
所有分类 2:篮球
所有分类 3:实况足球
所有分类 4:足球
所有分类共 4 个
分类 奥运 与 足球 不匹配
分类 奥运 与 足球 不匹配
分类 奥运 与 足球 不匹配
分类 篮球 与 足球 不匹配
分类 篮球 与 足球 不匹配
分类 篮球 与 足球 不匹配
分类 实况足球 与 足球 不匹配
分类 实况足球 与 足球 不匹配
分类 实况足球 与 足球 不匹配大家看看,明明 rsc 指针可以找到 4 个分类,但是再循环进行分类匹配计算的时候却只出现了前面的三个!!!最后一个没了!!!到底是怎么回事?我明明循环语句写的是 while(rsc.next()){……} 啊,在我其它所有的程序里,这种语句向来都是数据库每行全走的,为什么一到这里就在倒数第二行停住了???
解决方案 »
- debug中不明白的地方
- java中静态方法调用非静态变量的问题
- 我是新手,我已经安装了jdk6,我要用它制作网页,请问还要准备什么?
- 请问聊天室编写中体现异步应该是什么过程
- 一个简单的语句检查
- 我们公司的论坛,新开张的
- & 、&& 有啥区别,具体讲讲???
- EJB到底是什么东西?它能作什么?
- jbuilder的问题!肯定给分!
- Swing小程序客户端连接服务器端, 客户端不能多开登陆服务器端. 不懂原因, 各位大人帮帮忙.
- ImageIO.write(bufferedimage, "png", outputstream)是否进行了压缩在传输
- 初学大家别见笑啊~~看看我的代码怎么运行if判断不了我输入的条件啊~~
while(rs.next()){
很明显,那个rs只有3个,你这里当然也只能有三个啦
没明白。内循环跟外循环的次数又不一定得一样。rs 有三行,它在内循环里走了一遍,然后离开循环,指针归位,然后下一个外循环又执行了刚才的内容,并且外循环 rsc 理应走四遍,为什么第四遍它就不走了?
……
String[] Class=new String[SimCount];
ResultSet rsc=DBC.ExecuteQuery("Select Subclass from [Class]"); //搜索所有分类
int Count=0;
while(rsc.next()){
Count++; //统计总数
System.out.println("所有分类 "+Count+":"+rsc.getString("Subclass"));
}
rsc.beforeFirst();
System.out.println("所有分类共 "+Count+" 个");
……
int i=0;
while(rsc.next()){
Class[i]=rsc.getString("Subclass"); //先对所有分类进行逐行扫描
i++;
}
结果为什么运行出来还是:所有分类 1:奥运
所有分类 2:篮球
所有分类 3:实况足球
所有分类 4:足球
所有分类共 4 个
分类 奥运
分类 篮球
分类 实况足球前面有四个,后面只有仨??????
List list1=new ArrayList();
List list2=new ArrayList();
while(rs.next()){
list1.add(rs.getString("Subclass"));
}
rs.close();
while(rsc.next()){
list1.add(rsc.getString("Subclass"));
}
rsc.close();
//关闭联接等资源
//比较两个list中数据