我一整天都在努力解决这个问题,没有运气。如果有人可以提供帮助,我们将不胜感激。
我有ArrayList
Strings
由姓名和地址组成。在地址之后,有一个空String
,下一个名称开始。方法getAddress
采用String参数(名称)并返回pereson的地址(名称后面的行包括空字符串,但在那里停止)。我在编写这种方法时遇到了麻烦。
import java.util.ArrayList;
public class Recipients {
ArrayList<String> lines = new ArrayList<String>();
public String extractCity(String cityZip) {
int pos = cityZip.indexOf(",");
return cityZip.substring(0, pos);
}
public void printNames() {
System.out.println(lines.get(0));
for (int i = 0; i < lines.size()-1; i++)
if (lines.get(i).substring(0, lines.get(i).length()).equals(""))
System.out.println(lines.get(i+1));
}
public String getAddress(String name) {
String address = "";
int ct = 0;
int place = 0;
for (int i = 0; i < lines.size(); i++) {
if (lines.get(i).substring(0, lines.get(i).length()).equals(name)) {
place = i;
for (int j = i+1; j < lines.size(); j++) {
ct = j;
if (!lines.get(i).substring(0, lines.get(i).length()).equals("")) {
ct++;
}
}
for (int k = place; k < ct; k++) {
address = address + lines.get(i);
}
}
}
return address;
}
public void main() {
lines.add("Mr. J Adams");
lines.add("Rose St.");
lines.add("Ithaca, NY 14850");
lines.add("");
lines.add("Jack S. Smith");
lines.add("12 Posy Way");
lines.add("Suite #201");
lines.add("Glendale, CA 91203");
lines.add("");
lines.add("Ms. M.K. Delgado");
lines.add("2 River Dr.");
lines.add("");
System.out.println(getAddress("Jack S. Smith"));
System.out.println("test line break");
}
}
感谢您的时间。
编辑:此方法应该写在Recipients类中。它有一个假定的构造函数,我在类中编写了其他方法。我编辑了这门课。我的逻辑有问题。
工作表说:编写Recipients类的getAddress方法。此方法应返回仅包含相应name参数的地址的字符串。例如,如果名称是&#34; Jack S. Smith&#34;,则应返回包含其地址的三个后续行的字符串。该字符串应在适当的位置包含换行符,包括在地址的最后一行之后。
public String getAddress(String name)
答案 0 :(得分:2)
您应该创建用于保存名称和地址的类。请找到下面提到的方法。
package hello;
import java.util.ArrayList;
import java.util.List;
class Employee {
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
public class So3 {
public static void main(String[] args) {
List<String> lines = new ArrayList<String>();
lines.add("Mr. J Adams");
lines.add("Rose St.");
lines.add("Ithaca, NY 14850");
lines.add("");
lines.add("Jack S. Smith");
lines.add("12 Posy Way");
lines.add("Suite #201");
lines.add("Glendale, CA 91203");
lines.add("");
lines.add("Ms. M.K. Delgado");
lines.add("2 River Dr.");
lines.add("");
List<Employee> employees = new ArrayList<Employee>();
Employee employee = new Employee();
for (String str : lines) {
if (str.isEmpty()) {
if (employee.getName() != null && employee.getAddress() != null) {
employees.add(employee);
employee = new Employee();
}
} else if (employee.getName() == null) {
employee.setName(str);
} else {
if (employee.getAddress() == null) {
employee.setAddress(str);
} else {
employee.setAddress(employee.getAddress() + " " + str);
}
}
}
if (employee.getName() != null && employee.getAddress() != null) {
employees.add(employee);
}
System.out.println(getAddress(employees, "Ms. M.K. Delgado"));
}
private static String getAddress(List<Employee> employees, String name) {
if (employees != null && name != null) {
for (Employee employee : employees) {
if (name.equals(employee.getName())) {
return employee.getAddress();
}
}
}
return null;
}
}
答案 1 :(得分:1)
如果必须按需使用,则需要修改getAddress方法。在代码中尝试以下getAddress方法:
public String getAddress(String name) {
String address = "";
boolean nameFound=false;
for(String str:lines)
{
if(!nameFound && str.equals(name))
nameFound=true;
else if(nameFound && str.isEmpty())
break;
else if(nameFound && !str.isEmpty())
address+=str;
}
return address;
}
答案 2 :(得分:-1)
您应该使用HashMap而不是ArrayList。这是使用HashMap的完美场景。
public class APProblem {
Map<String, List<String>> lines2 = new HashMap<>();
public List<String> getAddress(String name) {
return lines2.get(name);
}
public void main() {
String name = "Mr. J Adams";
List<String> address = Arrays.asList("Rose St.", "Ithaca, NY 14850");
lines2.put(name, address);
name = "Jack S. Smith";
address = Arrays.asList("12 Posy Way", "Suite #201", "Glendale, CA 91203");
lines2.put(name, address);
System.out.println(getAddress("Jack S. Smith"));
System.out.println("Testing line break.");
}
}