我正在尝试在java中的2D数组上实现顺序搜索。
我目前有两节课。在第一个类中,用户将数据值输入到数组中并输入他希望搜索的术语(在他刚输入的数组/数据值中)。
此搜索由一个方法(第二类)处理,该方法进行顺序搜索,然后将结果传递回第一个类。
我已尝试使用以下代码,但顺序搜索无效...
文件#1(输入文件):
static public void s_2d_string () {
int counter,x;
counter = 2;
String[][] sortValues = new String[counter+1][2];
for (x=0;x<counter;x++) {
System.out.print("Enter book name: ");
sortValues[x][0] = readLine();
System.out.print("Enter book author: ");
sortValues[x][1] = readLine();
}
System.out.print("Which column would you like to sort by? 1 or 2? ");
String sortBystring = readline();
int sortBy;
sortBy = Integer.parseint(sortBystring);
sortBy = sortBy-1;
System.out.print("Enter search term: ");
String searchterm = readLine();
sortValues = s.sort(sortValues,counter, sortBy, searchterm);
int flagcounter_int = Integer.parseInt(sortValues[0][0]);
System.out.println(flagcounter_int + " results found.");
for (x=0;x<flagcounter_int;x++) {
System.out.println(sortValues[x+1][0] + ", " + sortValues[x+1][1]);
}
}
文件#2:
static public String[][] sort (String data[][], int totalNo, int sortBy, String searchterm) {
boolean found = false;
int flagcounter = 0;
if (sortBy == 0) {
for (int x=0; x<totalNo;x++) {
if (searchterm.equals(data[x][0])) {
found = true;
flagcounter = flagcounter+1;
data[flagcounter] = data[x];
}
}
}
if (sortBy == 1) {
for (int x=0; x<data.length;x++) {
if (searchterm.compareTo(data[x][1]) == 0) {
found = true;
flagcounter = flagcounter+1;
data[flagcounter] = data[x];
}
}
}
String flagcounter_string = Integer.toString(flagcounter);
data[0][0] = flagcounter_string;
return data;
}
具体问题是,如果我尝试在“n”列中搜索术语“k”并且第一行中出现术语“k”(无论哪一列),搜索功能将列出行数找到数组结果并列出结果:行数k(重复数组中的行数)。如果第一行中没有出现“k”(搜索功能完美无缺),则不会出现此问题。
如何解决这个问题?
答案 0 :(得分:0)
你有一个错误:在sort
方法中,第一个for循环(当sortBy == 0
)在x<totalNo
时终止,但它应该是x<data.length
(就像你的第二个循环)。
作为一般性评论,您的代码是否可怕,无论它是否有效。我建议:
sortBy
作为索引,而不是将列索引硬编码为0
或1
.equals()
代替.compareTo() == 0
答案 1 :(得分:0)
不确定错误的位置,您应该提供所有代码。
但可能的原因是
1)你同时使用for(int x=0; x<totalNo;x++)
和for(int x=0; x<data.length;x++)
,我会坚持第二种方式,然后你甚至不需要totalNo参数
2)对于字符串比较,你同时使用searchterm.equals(data[x][0])
和searchterm.compareTo(data[x][1]) == 0
,我会坚持第一种方式
3)不要调用搜索例程'sort',人们会期望一个名为sort的例程,好吧,排序......
4)考虑使用if (searchterm.equals(data[x][sortBy ])) {
,因为那时你不需要区分这两种类型的搜索。
吨。