我正在尝试编写一种方法,该方法搜索特定单词的ArrayList,然后打印该单词所有出现的位置。
这里是我所拥有的,在我输入要搜索的单词之前,它可以正常工作,但是什么都不打印:
import java.util.ArrayList;
import java.util.Scanner;
public class W7E2 {
public static void main(String[]args) {
System.out.println("Please anter words: ");
Scanner sc = new Scanner(System.in);
String []w = sc.nextLine().split(" ");
ArrayList<Words> word = new ArrayList<Words>();
for(int i=0; i<w.length; i++) {
word.add(new Words(w[i]));
}
System.out.println(word);
System.out.println("Please enter the word you want to search: ");
String search = sc.nextLine();
for(Words ws: word) {
if(ws.equals(search)) {
System.out.println(ws.getLocation());
}
}
}
static class Words{
private String wor;
private static int number = -1;
public Words(String wor) {
this.wor = wor;
number++;
}
public int getLocation() {
return number;
}
public String toString() {
return wor;
}
}
}
答案 0 :(得分:2)
在您的if
语句中,查看ArrayList
是否包含您所拥有的单词:
if(ws.equals(search)) {
System.out.println(ws.getLocation());
}
但是ws
是Word
对象,除非覆盖equals()
方法,否则它将永远不等于String
对象。您需要执行以下操作:
if(ws.getwor().equals(search)) {
System.out.println(ws.getLocation());
}
这是假设您为wor
创建了一个get方法。
答案 1 :(得分:0)
除GBlodgett的答案外,类number
中的Word
是静态的,因此每个Word
实例将具有相同的数字,您需要使用非静态变量来存储位置
static class Words{
private String wor;
private static int number = -1;
private int location;
public Words(String wor) {
this.wor = wor;
number++;
location = number;
}
public int getLocation() {
return location;
}
public String toString() {
return wor;
}
}
答案 2 :(得分:0)
您的代码应如下所示:
for(Words ws: word) {
if(ws.toString().equals(search)) { //to change
System.out.println(ws.getLocation());
}
}
ws是Words类的对象,您必须将其更改为toString()
答案 3 :(得分:0)
您应该做的不是
ws.equals(search)
您需要添加
ws.toString().equals(search)
当您从
toString()
Words
类中的方法。
所以代码应该看起来像这样,
for(Words ws: word) {
if(ws.toString().equals(search)) {
System.out.println(ws.getLocation());
}
}