我正在制作一个卡片套牌程序,它使用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
答案 0 :(得分:3)
如果您无法更改签名并且必须返回一个arraylist,那么您可以创建一个只包含一个元素的arraylist并将其返回。像这样:
ArrayList returnList = new ArrayList();
returnList.add(al.get(0));
return returnList;
对我来说不是很好看:-(
答案 1 :(得分: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<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());
}
}