Java - 返回"地址"来自名称和地址的{Array}

时间:2017-03-12 04:26:37

标签: java arraylist

我一整天都在努力解决这个问题,没有运气。如果有人可以提供帮助,我们将不胜感激。

我有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)

3 个答案:

答案 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.");
            }
}