我需要在一个对象数组中搜索一个Name,然后打印出与该名称对应的所有信息。
我有
public class AccessFriendlyFile {
private Friendlies[] fr = new Friendlies[100];
private int size = 0;
public AccessFriendlyFile (){
try {
Scanner scFile = new Scanner(new File("Friends.txt"));
String line, name, surname, cell, mail, landline;
while (scFile.hasNext()){
line = scFile.nextLine();
Scanner sc = new Scanner(line).useDelimiter("#");
name = sc.next();
surname = sc.next();
cell = sc.next();
if (sc.hasNext()){
mail = sc.next();
landline= sc.next();
fr[size] = new ExtendFriendlies(name, surname, cell, mail, landline);
}
else {
fr[size]= new Friendlies(name, surname, cell);
}
size++;
sc.close();
}
}catch (FileNotFoundException ex){
System.out.println("File not found");
}
如何编写一个搜索“fr”名称并打印出所有相应信息的方法?
非常感谢 杰西
编辑: 这是我的搜索方法,目前无效。
public int Search(String name) {
int loop = 0;
int pos = -1;
boolean found = false;
while (found == false) {
if (fr[loop] == name) {
found = true;
pos = loop;
} else {
loop++;
}
}
return pos;
}
if语句中的无法比较的类型错误。
答案 0 :(得分:1)
在Friendlies
课程中,有一个名为getName()
的方法,该方法将返回该友好名称。迭代fr
,直到找到匹配的名称。找到该名称后,请使用类似的get
方法打印出您刚才找到的匹配Friendly
所需的所有信息。
答案 1 :(得分:0)
这应该有效:
public List<Friendlies> search(String name) {
List<Friendlies> list = new ArrayList<Friendlies>();
for(Friendlies friendlies : fr) {
if(friendlies.getName().equals(name)) {
list.add(friendlies);
}
}
return list;
}
然后,使用返回的列表,实现数据的良好显示:)
答案 2 :(得分:0)
假设AccessFriendlyFile将数据加载到您的数组中,您可以为每个循环使用a,如果您想要查找所有匹配的名称:
List<Friendlies> getByName(String searched){
List<Friendlies> result = new Arraylist<Friendlies>();
for (Friendlies currentFriendly : fr){
if (searched.equalsIgnoreCase(currentFriendly.getName()){
result.add(currentFriendly);
}
}
return result;
}
仅适用于第一个:
Friendlies getByName(String searched){
for (Friendlies currentFriendly : fr){
if (searched.equalsIgnoreCase(currentFriendly.getName()){
return currentFriendly;
}
}
return null;
}
您应该使用列表而不是固定数组。如果文件包含超过100条记录,您将获得indexoutofbounds异常。
答案 3 :(得分:0)
我建议你在这里重命名你的变量。我认为,Friendlies类商店是一个单一的联系人,一个朋友。 Friend对象列表是一个您可能名为friendList甚至是友谊的数组。我还鼓励你不要使用size作为计数器变量。大小是你有多少朋友,你可以使用i或friendCounter迭代它们,或者如我在下面演示的那样使用每个循环,
public Friendlies find(String name) {
for(Friendlies friend : fr) {
if(friend.getName().equalsIgnoreCase(name))
return fiend;
}
return null;
}
//now to print the info you can do this:
Friendlies findJoe = find("Joe");
if(findJoe==null)
System.out.println("You have no friends namd Joe.");
else
System.out.println(findJoe);
我的代码假定您在Friendlies中实现toString()。如果您使用netbeans,则可以自动生成此代码,然后调整它以获得所需的格式。 (只需右键单击要编写方法的位置并选择插入代码)