从ArrayList方法类型返回ArrayList

3

我正在制作一个使用ArrayList的小卡牌程序。其中有一个限制是我必须使用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

那么我该如何返回 List 的第一个项目并确保它的类型正确?其他代码并不重要,只需要关注方法类型和返回语句即可。
编辑:根据请求进行了修改。
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

请展示一下您对 al 的声明。它是什么? - Jason C
1
我认为你误解了问题陈述或要求。如果你必须返回一个 ArrayList,那么你必须将结果放入 ArrayList 中并返回它。此外,你不应该使用未经限定的(即原始的)泛型类型。它是一个 ArrayList<Someclass>,知道 Someclass 应该是什么会有所帮助。你没有提供足够的信息。 - Jim Garrison
1
限制是从哪里来的?如果你(在任何情况下)总是需要返回一个元素,那么返回类型真的不应该是“ArrayList”。这种情况可能是一个暗示,你可能误解了你的任务(作业?)。 - Bengt
“deal(int n, boolean up)” 这个方法签名看起来像是要返回一个由 n 张牌组成的 ArrayList。我认为你需要再阅读一下你的任务说明。 - Radiodef
限制确实是由教师设定的。这是我对问题的理解。基本上,我必须在另一个类文件中调用deal方法,该方法将显示列表中的n个元素,然后将它们删除。因此,在测试类文件中,我执行deck0.deal(int n, boolean up),然后必须打印出n张牌,声明它们是正面朝上还是背面朝上,并从列表中删除这些元素。我不知道如何在测试类端执行此操作,因此我认为我必须在方法本身中执行此操作,如上所述。 - user3066571
4个回答

4

如果您不能更改签名,并且必须返回一个ArrayList,则可以创建一个只有一个元素的ArrayList并返回它。就像这样:

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

在我看来不太好 :-(


@JasonC 是的,Jason,我在输入后意识到了这个错误...不管怎样,谢谢你...已经纠正了! - Juned Ahsan
这可能是OP需要的,也可能不是。由于问题非常不清楚,您应该发表评论以请求澄清,或者等待问题变得更加明确。 - Jim Garrison

0

你有必要返回一个ArrayList吗?实际上,你正在尝试创建一个方法,该方法接收一副牌,选出一张牌,然后返回一副牌。你可以尝试使用上面提到的subList方法。你可以创建一个只包含你想要的那张牌的新ArrayList,但这不是很高效。或者,如果你的目标是实际上返回整副牌,但是将正确的牌放在顶部(即ArrayList的第一个位置),那么关于重新排列ArrayList中的值的信息有很多在线上。

编辑:根据你的完整代码,看起来目标是翻转第一张牌。你应该这样做(我不会替你完成作业!),然后返回该方法接收的ArrayList。在现实生活中,想象一下把一副牌递给别人,他们翻开第一张牌,然后把牌递回给你。


0
在您的特定情况下,al 是一个 ArrayList<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,这样可以避免很多强制转换或未经检查的转换,而且还能在编译时对类型进行检查。

0

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

public class EmployeeDB { static ArrayList e = new 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());

}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接