从ArrayList方法类型返回ArrayList

时间:2014-03-18 02:19:38

标签: java methods arraylist return

我正在制作一个卡片套牌程序,它使用ArrayList作为套牌。我所面临的一个限制是我所处理的方法#34;卡片必须是Arraylist类型。我遇到的问题是我不知道如何从ArrayList返回特定的索引值。见下文。

public ArrayList deal(int n, boolean up){
    Card card0 = new Card();
    boolean cardFace = card0.state(up);
    return al.get(0);  //<-- This doesn't work, Netbeans says that it is a string type
                            //not an ArrayList type.  The only thing it will actually
                            //allow me to return is:
    return.al;  // But this doesn't work, I don't need to return the whole list,
                // just the first element, but Netbeans calls that a String type, not
                // ArrayList

那么如何返回列表的第一项并仍然是正确的类型?其余的代码并不重要,只有Method类型和return语句。

编辑:根据要求

package deckofcards;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Deck{
    ArrayList<String> al = new ArrayList<>();
    public void shuffle(){
        Collections.shuffle(al);
    }
    public String displayDeck(){
        String returnDeck = "";
        for(int i = 0; i < al.size(); i++){
            String printDeck = al.get(i);
            returnDeck += printDeck;
        }
        return returnDeck;
    }
    public ArrayList deal(int n, boolean up){
        Card card0 = new Card();
        boolean cardFace = card0.state(up);
        return al.get(0);
    }
    public void populate(){
        al.add(0, "Ace of Spades");
        al.add(1, "Two of Spades");
        al.add(2, "Three of Spades");
        //yadaa yadaa

4 个答案:

答案 0 :(得分:3)

如果您无法更改签名并且必须返回一个arraylist,那么您可以创建一个只包含一个元素的arraylist并将其返回。像这样:

ArrayList returnList = new ArrayList();
returnList.add(al.get(0));
return returnList;

对我来说不是很好看:-(

答案 1 :(得分:0)

在您的具体情况下,alArrayList<String>。这意味着al.get(...)会返回String。但是,您的方法被声明为返回ArrayList,而不是String。您需要将方法返回类型更改为String,否则您需要构造一个新的ArrayList并将单个字符串添加到其中并返回该字符串。

您声明的返回类型需要与您要返回的对象匹配。例如:

 ArrayList<String> al = ...;

 String getSingleItem (int index) {
     return al.get(index);
 }

 ArrayList<String> getSingleItemAsArrayList (int index) {
     ArrayList<String> single = new ArrayList<String>();
     single.add(al.get(index));
     return single;
 }

 ArrayList<String> getItems () {
     return al;
 }

顺便说一下,通常最好将类型参数指定为ArrayList,例如ArrayList<Whatever>,因为这可以为您节省大量/未经检查的转换,并为您提供类型的编译时检查。

答案 2 :(得分:0)

是否有必要返回ArrayList的原因?从本质上讲,您正在尝试创建一种方法,该方法需要一个牌组,选择一张牌,然后返回牌组。您可以尝试使用上面提到的subList方法。你可以创建一个只包含你想要的卡的新ArrayList,但效率不高。或者,如果您的目标是实际返回整个套牌,但顶部有正确的卡(也就是ArrayList的第一个位置),那么有大量关于在线ArrayList中重新排列值的信息。

编辑:根据您的完整代码,看起来目标是将第一张卡面朝上翻转。你应该这样做(不要为你做功课!)然后返回该方法所带的ArrayList.IRL,想象一下将某人牌给一个牌组,他们将第一张牌面朝上翻转,然后将牌组交给你。

答案 3 :(得分:0)

//添加和删除员工 //显示员工列表

公共类EployeeDB {     静态ArrayList e =新的ArrayList <>();

public static boolean addEmployee(Employee e1) {

    e.add(e1);
    System.out.println("Employee added");
    return true;

}

public static boolean deleteEmployee(int ecode) {
    int temp = 0;
    for (int i = 0; i < e.size(); i++) {

        if (e.get(i).getID() == ecode) {
            temp = temp + 1;
            e.remove(i);
            break;
        }
    }
    if (temp == 1)
        System.out.println("Emp deleted");
    else
        System.out.println("Deletion unsuccessful, check ecode again");
    return true;

}

public static String showPaySlip(int ecode) {
    double salary = 0;
    int temp = 0;
    for (int i = 0; i < e.size(); i++) {
        if (e.get(i).getID() == ecode) {
            temp = temp + 1;
            salary = e.get(i).getSalary();
            break;
        }
    }
    if (temp == 1)
        return "Salary is" + salary;
    else
        return "No employye found with the specified ecode";

}

public static ArrayList<Employee> listAll() {

    return e;

}

public static void main(String[] args) {
    Employee e1 = new Employee();
    e1.setID(20);
    e1.setName("sai");
    e1.setSalary(150.00);
    addEmployee(e1);
    Employee e2 = new Employee();
    e2.setID(30);
    e2.setName("kumar");
    e2.setSalary(1500.00);
    addEmployee(e2);
    deleteEmployee(30);
    System.out.println(showPaySlip(30));

    for (int i = 0; i < e.size(); i++)
        System.out.println(
                listAll().get(i).getID() + " " + listAll().get(i).getName() + " " + listAll().get(i).getSalary());

}

}