Java 从ArrayList方法类型返回ArrayList

Java 从ArrayList方法类型返回ArrayList,java,methods,arraylist,return,Java,Methods,Arraylist,Return,我正在制作一个小卡片组程序,它使用一个ArrayList作为卡片组。对我设置的限制之一是,我“处理”卡的方法必须是Arraylist类型。我遇到的问题是,我不知道如何仅从ArrayList返回一个特定的索引值。见下文 public ArrayList deal(int n, boolean up){ Card card0 = new Card(); boolean cardFace = card0.state(up); return al.get(0); //<-

我正在制作一个小卡片组程序,它使用一个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
public ArrayList交易(int n,boolean up){
卡片0=新卡片();
布尔cardFace=card0.state(向上);

返回al.get(0);//如果无法更改签名并且必须返回arraylist,则可以创建一个只包含一个元素的arraylist并返回它。类似于以下内容:

ArrayList returnList = new ArrayList();
returnList.add(al.get(0));
return returnList;
在我看来不太好:-(
在您的特定情况下,
al
是一个
ArrayList
。这意味着
al.get(…)
返回一个
字符串
。但是,您的方法被声明为返回一个
数组列表
,它不是
字符串
。您需要将方法返回类型更改为
字符串
,或者需要构造一个新的
数组列表
,并将单个字符串添加到其中并返回该字符串

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

 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;
 }
arraylistal=。。。;
字符串getSingleItem(int索引){
返回al.get(索引);
}
ArrayList getSingleItemAsArrayList(整数索引){
ArrayList single=新的ArrayList();
single.add(al.get(index));
返回单;
}
ArrayList getItems(){
返回al;
}

顺便说一句,通常最好将类型参数指定为
ArrayList
,例如
ArrayList
,因为这样可以节省大量转换/未检查转换的时间,并且可以在编译时检查类型。

是否有必要返回ArrayList?本质上,您正在尝试创建一种方法,它获取一副牌,选择一张牌,然后返回一副牌。你可以尝试使用上面提到的子列表方法。你可以创建一个新的ArrayList,其中只包含你想要的牌,但这不是很有效。或者,如果你的目标是实际返回整个牌组,但上面有正确的牌(也就是在ArrayList的第一个位置),在线ArrayList中有很多关于重新排列值的信息


编辑:根据您的完整代码,目标似乎是将第一张卡片正面朝上翻转。您应该这样做(而不是为您做功课!),然后返回该方法接收的ArrayList。IRL,想象一下,给某人一副牌,他们将第一张牌正面朝上翻转,然后将牌面交还给您。

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

公共级EPLOYEDB{ 静态ArrayList e=新ArrayList()

公共静态布尔加法雇员(雇员e1){
e、 添加(e1);
System.out.println(“员工添加”);
返回true;
}
公共静态布尔deleteEmployee(int ecode){
内部温度=0;
对于(int i=0;i

}

请向我们展示您对
al
的声明。这是什么?我认为您误解了问题陈述或要求。如果您必须返回
ArrayList
,那么您必须将结果放入
ArrayList
并返回该列表。此外,您不应使用不合格(即原始)泛型类型。它是一个
ArrayList
,了解
Someclass
应该是什么会有帮助。您没有提供足够的信息。限制来自何处?如果您(在任何情况下)总是需要只返回一个元素,返回类型实际上不应该是
ArrayList
。这种情况可能是一种暗示,表明您误解了任务(家庭作业?。
deal(int n,boolean up)
这个方法签名看起来你应该返回一个
n
卡片的数组列表。我认为你需要重新阅读你的作业。限制确实是由讲师规定的。这是我对问题的解释。基本上我必须(在另一个类文件中)调用deal方法,该方法将显示列表中的
n
元素,然后删除它们
然后必须打印出
n
卡片,声明它们是朝上还是朝下,并从列表中删除这些元素。我不知道如何在测试类结束时这样做,所以我想我必须在方法本身中这样做,如上所述。@JasonC是的,Jason我在键入后意识到了这一点…无论如何,谢谢…更正!这可能是正确的,也可能是错误的这不是OP需要的。因为问题非常不清楚,你应该发表评论要求澄清
 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;
 }
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());

}