我把我详细的算法程序的前半段贴出来。该算法里头,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()){……} 啊,在我其它所有的程序里,这种语句向来都是数据库每行全走的,为什么一到这里就在倒数第二行停住了???
解决方案 »
- 请教一个小问题 paintComponent 函数调用不了(?)的问题.
- rmi拨号方式,连接不上的问题
- 环境配置问题
- 怎样做到定长输出一个串?
- 这个程序跌代器用与不用的区别在哪里?
- 数据类型的问题
- 关于java中输入数据的问题
- 有看过《java core》那本书的朋友进来帮我一下,小弟先谢过了。
- 问大家一个非技术的问题:北京和上海那的开发坏境好一些,生活环境好一些,选择去上海还是北京?
- 救命呀。web server程序
- 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中数据