当前位置:编程学习 > JAVA >>

求帮助,自己编了两个方法实现要求,一个可以,另一个就运行错误

求帮助,自己编了两个方法实现要求,一个可以,另一个就运行错误
实现的要求是根据输入的字符串,查出相对应的文章信息。
我自己编写了两个方法:
ShowTypeByInput和Show2,Show2这个方法出来的结果有问题。我纠结了很久还是没有发现问题,求大家帮我看看到底怎么回事,哪里出了问题
运行结果如下图:
1是运行了ShowTypeByInput()方法的结果,是正确的;2是运行了Show2()方法的结果,是错误的。


代码如下:


package xmlTest;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class Test2 {
public static void main(String [] args){
System.out.println("请输入手机型号(区分大小写):");
Scanner input= new Scanner(System.in);
String type = input.next();
ShowTypeByInput(type);
System.out.println("######################");
Show2(type);
}

public static ArrayList<Item> ShowType(){
ArrayList<Item> array = new ArrayList<Item>();

try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("src/网易手机各地行情.xml");
NodeList list = doc.getElementsByTagName("item");
for(int i =0;i<list.getLength();i++){
Item item = new Item();
Element element = (Element) list.item(i);
String title = element.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
String description = element.getElementsByTagName("description").item(0).getFirstChild().getNodeValue();
String pubDate = element.getElementsByTagName("pubDate").item(0).getFirstChild().getNodeValue();
String link = element.getElementsByTagName("link").item(0).getFirstChild().getNodeValue();

item.setTitle(title);
item.setLink(link);
item.setDescription(description);
item.setPubDate(pubDate);
array.add(item);
}
return array;
} catch (Exception e) {
e.printStackTrace();
return null;
}


}


public static void ShowTypeByInput(String in){
List<Item> list1 = ShowType();
for(int i = 0;i<list1.size();i++){
if((list1.get(i).getTitle().indexOf(in))!=-1){
System.out.println((i+1) +"\t"+list1.get(i).getTitle());
}  
}

}

public static void Show2(String in){
List<Item> list1 = ShowType();
for(Item i:list1){
int index=0;
if((index = i.getTitle().indexOf(in))!=1){
System.out.println(index+"\t"+i.getTitle());
}
}
}
}

--------------------编程问答-------------------- 楼主不够认真啊你Show2方法里面的
if((index = i.getTitle().indexOf(in))!=1){
                System.out.println(index+"\t"+i.getTitle());
            }
应该是
if((index = i.getTitle().indexOf(in))!=-1){
                System.out.println(index+"\t"+i.getTitle());
            } --------------------编程问答-------------------- index = i.getTitle().indexOf(in))!=1这个编译能通过吗 --------------------编程问答--------------------
引用 1 楼 suciver 的回复:
楼主不够认真啊你Show2方法里面的
if((index = i.getTitle().indexOf(in))!=1){
                System.out.println(index+"\t"+i.getTitle());
            }
应该是
if((index = i.getTitle().indexOf(in))!=-1){
                System.out.println(index+"\t"+i.getTitle());
            }


嘿嘿,不好意思,粗心了,刚刚改回来了,不过继续报错中。。。



左边的数字不一致,两个方法输出的不一致。 --------------------编程问答--------------------
引用 2 楼 qiyejunlintian 的回复:
index = i.getTitle().indexOf(in))!=1这个编译能通过吗

编译时可以通过, --------------------编程问答--------------------
引用 3 楼 alice_sg 的回复:
Quote: 引用 1 楼 suciver 的回复:

楼主不够认真啊你Show2方法里面的
if((index = i.getTitle().indexOf(in))!=1){
                System.out.println(index+"\t"+i.getTitle());
            }
应该是
if((index = i.getTitle().indexOf(in))!=-1){
                System.out.println(index+"\t"+i.getTitle());
            }


嘿嘿,不好意思,粗心了,刚刚改回来了,不过继续报错中。。。



左边的数字不一致,两个方法输出的不一致。

必须不一致啊你ShowTypeByInput方法System.out.println((i+1) +"\t"+list1.get(i).getTitle());输出的是迭代的i+1
Show2方法System.out.println(index+"\t"+i.getTitle());输出的是从title属性里面查出的位置index --------------------编程问答-------------------- 建议把
public static void ShowTypeByInput(String in){
        List<Item> list1 = ShowType();
        for(int i = 0;i<list1.size();i++){
            if((list1.get(i).getTitle().indexOf(in))!=-1){
                System.out.println((i+1) +"\t"+list1.get(i).getTitle());
            }  
        }
         
    }

中打印换成System.out.println(list1.get(i).getTitle().indexOf(in) +"\t"+list1.get(i).getTitle());
看看效果 --------------------编程问答--------------------
引用 6 楼 UDBuilder 的回复:
建议把
public static void ShowTypeByInput(String in){
        List<Item> list1 = ShowType();
        for(int i = 0;i<list1.size();i++){
            if((list1.get(i).getTitle().indexOf(in))!=-1){
                System.out.println((i+1) +"\t"+list1.get(i).getTitle());
            }  
        }
         
    }

中打印换成System.out.println(list1.get(i).getTitle().indexOf(in) +"\t"+list1.get(i).getTitle());
看看效果

其实①那里输出的才是正确的顺序
我不明白,为什么②会出错。 --------------------编程问答--------------------
引用 5 楼 suciver 的回复:
Quote: 引用 3 楼 alice_sg 的回复:

Quote: 引用 1 楼 suciver 的回复:

楼主不够认真啊你Show2方法里面的
if((index = i.getTitle().indexOf(in))!=1){
                System.out.println(index+"\t"+i.getTitle());
            }
应该是
if((index = i.getTitle().indexOf(in))!=-1){
                System.out.println(index+"\t"+i.getTitle());
            }


嘿嘿,不好意思,粗心了,刚刚改回来了,不过继续报错中。。。



左边的数字不一致,两个方法输出的不一致。

必须不一致啊你ShowTypeByInput方法System.out.println((i+1) +"\t"+list1.get(i).getTitle());输出的是迭代的i+1
Show2方法System.out.println(index+"\t"+i.getTitle());输出的是从title属性里面查出的位置index

Show2方法中符合要求的title的位置为什么会变?这个方法不是按照我写入的顺序遍历里面的array,判断是否含有我输入的字符串的吗? --------------------编程问答-------------------- 突然对你的Item类很感兴趣,看看代码 --------------------编程问答--------------------
引用 9 楼 UDBuilder 的回复:
突然对你的Item类很感兴趣,看看代码


不好意思,前段时间有事没开电脑,现在将代码奉上:


package xmlTest;

public class Item {
private String title;
private String link;
private String description;
private String pubDate;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPubDate() {
return pubDate;
}
public void setPubDate(String pubDate) {
this.pubDate = pubDate;
}


}

--------------------编程问答--------------------
引用 10 楼 alice_sg 的回复:
Quote: 引用 9 楼 UDBuilder 的回复:

突然对你的Item类很感兴趣,看看代码


不好意思,前段时间有事没开电脑,现在将代码奉上:


package xmlTest;

public class Item {
private String title;
private String link;
private String description;
private String pubDate;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPubDate() {
return pubDate;
}
public void setPubDate(String pubDate) {
this.pubDate = pubDate;
}


}


public static void Show2(String in){
        List<Item> list1 = ShowType();
        for(Item i:list1){
            int index=0;
            if((index = i.getTitle().indexOf(in))!=1){
                System.out.println(index+"\t"+i.getTitle());
            }
        }
    }

这里得到的index是字符串in在整个一行中的位置,比如说在这一行里“U8650”在第一行字符串的位置是12,所以index=12,输出的也就是12了 --------------------编程问答-------------------- 在Show2方法里,你想输出的应该是i在list1中的位置,而不是in在title中的位置
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,