求帮助,自己编了两个方法实现要求,一个可以,另一个就运行错误
求帮助,自己编了两个方法实现要求,一个可以,另一个就运行错误实现的要求是根据输入的字符串,查出相对应的文章信息。
我自己编写了两个方法:
ShowTypeByInput和Show2,Show2这个方法出来的结果有问题。我纠结了很久还是没有发现问题,求大家帮我看看到底怎么回事,哪里出了问题
运行结果如下图:
1是运行了ShowTypeByInput()方法的结果,是正确的;2是运行了Show2()方法的结果,是错误的。
代码如下:
--------------------编程问答-------------------- 楼主不够认真啊你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());
}
}
}
}
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这个编译能通过吗 --------------------编程问答--------------------
嘿嘿,不好意思,粗心了,刚刚改回来了,不过继续报错中。。。
左边的数字不一致,两个方法输出的不一致。 --------------------编程问答--------------------
编译时可以通过, --------------------编程问答--------------------
必须不一致啊你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());
看看效果 --------------------编程问答--------------------
建议把
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());
看看效果
其实①那里输出的才是正确的顺序
我不明白,为什么②会出错。 --------------------编程问答--------------------
楼主不够认真啊你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类很感兴趣,看看代码 --------------------编程问答--------------------
突然对你的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;
}
}
突然对你的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