books中多条数据情况下 如果满足数据的是第二条 第一次执行与传进来书名对比不相等,就会进入else 第二次才会进入if
你的代码没错 输出逻辑错了
把方法返回值换成true 或者false 我不知道你的返回值有没有用可以直接输出 ,判断地方换成
if (xx.equals(xx)){
print('有书');
return true;
}
循环结束后:
print('没有书');
return false;
因为第一次来的时候,不相等,所以走了else。
所以打印语句应该在找的外面,
如果有,返回索引下标.那么说明有,
如果没有,那么返回-1就好了。
可以写成
int index = -1;
for(int i=0;i<books.length;i++)
{
if(books[i].getName().equals(bookname))
{
index = i;
break;
}
else
{
continue;
}
}
if(index!=-1)
System.out.printlin("==========>书在"+index);
因为你这是一个for循环,第一次循环时不符合条件,就会显示无此书,符合条件则才会打印书名
出错的点在于:判断有没有书,需要遍历完整个books,同时if-else是互斥的,if不满足就进入else。所以当books中第一个元素不是《java》,就会走else。
修改:
public int queryBook(String bookname){
int i;//将i提取出来,同时作为下面判断的依据。中间遍历books,最后再进行一次判断
for(i=0;i<books.length;i++){
if(books[i]!=null){
if(books[i].getName().equals(bookname)){
System.out.println("有此书");
break;
}
}
}
if(i==books.length){//如果等于,说明上面的break没有执行,否则i必须小于length
System.out.println("无此书");
}
return 1;
}
应该把判断放在循环外,不要放在循环内,否则就会出现相反的情况
比如,你现在的情况就是,因为循环第一个是没有的,那他当然先走的就是else部分了
你把 java 这本书 放在你books 数组的第一个就不会执行 else了