【发布时间】:2015-11-16 21:31:55
【问题描述】:
//Example from class that I was trying to base off of:
public void printMajors(String major) {
for(Student x : dir) {
//dir = new HashMap<Integer, Student>(); and Student is the second class.
if (x.getMajor().equals(major)) {
System.out.println(x.getName());
}
}
}
我想打印出所有插入了相同区号但迭代器在找到匹配项后中途停止的人。如何让它继续循环并打印出具有相同区号的每个人?
//代码中的问题
public boolean printAreaCode(String areacode) {
for (String p : phonebook.values()) {
if (p.startsWith(areacode)) {
for (String name : phonebook.keySet()) {
String key = name;
System.out.println(key);
return true;
}
}
}
return false;
}
整个作业
import java.util.HashMap;
import java.util.Iterator;
public class PhoneBook {
private HashMap<String, String> phonebook;
public static void main(String[] args) {
PhoneBook phone = new PhoneBook();
phone.addEntry("Alexander Schnell", "987-654-3210");
phone.addEntry("Bob the Builder", "555-555-5555");
phone.addEntry("Michael", "465-858-5555");
phone.addEntry("Robert", "778-555-1234");
phone.addEntry("Charlie", "987-546-4564");
phone.addEntry("Steve", "909-555-7845");
System.out.println("All of the people in the directory:");
phone.printListings(); //works
System.out.println("");
System.out.println("People with matching area codes:"); //WIP
phone.printAreaCode("987");
System.out.println("");
System.out.println("Prints phone number for requested person:");
phone.getNumber("Bob the Builder"); //works
}
//Adds a new entry to the phone book (naturally).
//It has two parameters, both Strings: the person’s name and their phone
//number (in the form “610-499-4035”).
public void addEntry(String name, String number) {
phonebook.put(name, number);
}
//prints the names and phone numbers of everyone in the phone book
private void printListings() {
for (Iterator<String> it = phonebook.keySet().iterator(); it.hasNext();) {
for (String p : phonebook.values()) {
String key = (String) it.next();
System.out.println(key + ": " + p.toString());
}
}
}
//looks up a number in the map.
//It has one parameter (a person’s name) and returns a PhoneNumber object.
public String getNumber(String name) {
//public void getNumber(String name) {
// no return statement
System.out.println(phonebook.get(name));
return phonebook.get(name);
}
//prints the names of all people with the given area code
public boolean printAreaCode(String areacode) {
for (String p : phonebook.values()) {
if (p.startsWith(areacode)) {
for (String name : phonebook.keySet()) {
String key = name;
System.out.println(key);
return true;
}
}
}
return false;
}
public PhoneBook() {
phonebook = new HashMap<String, String>();
}
}
我什至不认为这门课与我的主课交流。 我的老师刚刚说它必须包括在内。 这可能是个问题。
public class PhoneNumber {
private String areacode;
private String prefix;
private String four;
//Insert a phone number
public PhoneNumber(String number) {
String[] parts = number.split("-");
areacode = parts[0];
prefix = parts[1];
four = parts[2];
}
@Override
public String toString() {
String s = areacode + "-" + prefix + "-" + four;
return s;
}
}
【问题讨论】:
-
你觉得
return true;在做什么? -
它阻止了 println 打印出所有的名字。我不记得它是否会一直打印一次或两次。无论哪种方式,返回 true;声明阻止它这样做。
-
@MadProgrammer - 忘记标记你了。
-
使用局部变量作为标志(即
found),将其设置为false,当您遍历列表时,每次找到匹配项时,打印出结果并设置标记为true。在方法结束时返回标志 -
如果我这样做,程序只会打印两次人员列表。 @MadProgrammer