从 ArrayList 方法类型返回 ArrayList
Posted
技术标签:
【中文标题】从 ArrayList 方法类型返回 ArrayList【英文标题】:Return ArrayList from ArrayList method type 【发布时间】:2014-04-23 12:49:29 【问题描述】:我正在制作一个使用 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 的第一项并且仍然是正确的类型呢?其余代码无关紧要,只需要 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
【问题讨论】:
请向我们展示您的al
声明。这是什么?
我认为您误解了问题陈述或要求。如果您必须返回 ArrayList
,那么您必须将结果 放入 ArrayList
并返回。此外,您不应该使用不合格的(即原始)泛型类型。这是一个ArrayList<Someclass>
,它有助于了解Someclass
应该是什么。您确实没有提供足够的信息。
限制从何而来?如果您(在任何情况下)总是需要只返回一个元素,那么返回类型真的不应该是ArrayList
。这种情况可能暗示你误解了你的任务(家庭作业?)。
deal(int n, boolean up)
这个方法签名看起来你应该返回一个 n
卡片的 ArrayList。我认为你需要重新阅读你的作业。
这个限制确实是导师规定的。这是我对问题的解释。本质上,我必须(在另一个类文件中)调用 deal 方法,该方法将显示列表中的 n
元素,然后删除它们。所以在测试类文件中,我执行deck0.deal(int n, boolean up)
,然后必须打印出n
卡片,声明它们是朝上还是朝下,然后从列表中删除这些元素。我不知道如何在测试类结束时做到这一点,所以我想我必须在方法本身中做到这一点,如上所述。
【参考方案1】:
//添加和删除员工 //显示员工列表
公共类 EployeeDB 静态 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());
【讨论】:
【参考方案2】:如果您无法更改签名并且必须返回一个数组列表,那么您可以创建一个只有一个元素的数组列表并将其返回。像这样的:
ArrayList returnList = new ArrayList();
returnList.add(al.get(0));
return returnList;
我觉得不太好:-(
【讨论】:
@JasonC 是的,Jason 我在输入后才意识到...无论如何谢谢...已更正! 这可能是也可能不是 OP 需要的。由于问题非常不清楚,您应该发表评论要求澄清,或者等到问题有意义。【参考方案3】:是否有理由必须返回 ArrayList?本质上,您正在尝试创建一个方法,该方法获取一副牌,挑选一张牌,然后返回一副牌。您可以尝试使用上面提到的 subList 方法。您可以创建一个只包含您想要的卡片的新 ArrayList,但这不是很有效。或者,如果您的目标是实际返回整个牌组,但在顶部有正确的卡片(也就是在 ArrayList 的第一个位置),那么网上有很多关于在 ArrayList 中重新排列值的信息。
编辑:根据您的完整代码,目标似乎是将第一张卡面朝上翻转。你应该这样做(不会为你做功课!)然后返回该方法接收的 ArrayList。IRL,想象给某人一副牌,他们将第一张牌翻面朝上,然后把牌还给你。
【讨论】:
【参考方案4】:在您的具体情况下,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<Whatever>
,因为这可以为您节省很多围绕/未经检查的转换的东西,并且可以在编译时检查类型。
【讨论】:
以上是关于从 ArrayList 方法类型返回 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章