use*_*571 0 java methods class arraylist
我正在使用ArrayList构建一小部分卡片类.我遇到的问题是,当我尝试调用我的Deck方法填充列表时,我得到一个无法找到符号.代码如下.
package deckofcards;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
class Deck{
ArrayList<String> al = new ArrayList<String>();
//test method
public void main(String[] args){
Scanner input = new Scanner(System.in);
int choice = 9;
al.Deck(); //<--Right here is the problem, it gives Cannot Find Symbol
//Symbol: method Deck() Location: variable al of type
//ArrayList<String>
while(choice != 0){
System.out.println("Shuffle - 1 Display - 2 Exit - 0:");
//didn't finish since it gave an error
}
}
private void Shuffle(){
Collections.shuffle(al);
}
private void Deck(){
al.add(0, "Ace of Spades");
al.add(1, "Two of Spades");
al.add(2, "Three of Spades");
//yadaa yadaa yadaa
Run Code Online (Sandbox Code Playgroud)
我根本无法弄清楚如何在列表中正确调用我的方法.有谁知道我做错了什么?
注意:这是一个辅助类文件,包的主类文件将只包含主要的测试方法.
al是一个实例ArrayList,而ArrayList类没有Deck方法.你应该做的是声明和初始化一个Deck具有Deck方法的类型的变量:
//al.Deck();
Deck deck = new Deck();
deck.Deck(); //technically, this will do
Run Code Online (Sandbox Code Playgroud)
但似乎你想al在Deck类构造函数中初始化变量中的元素,这是你目前没有的.构造函数是一个方法,它具有相同的类名,并且没有任何返回类型.所以这个方法:
public void Deck() {
...
}
Run Code Online (Sandbox Code Playgroud)
不是构造函数.只需删除void关键字,它就会成为构造函数:
public Deck() {
...
}
Run Code Online (Sandbox Code Playgroud)
所以,在你声明一个真正的构造函数之后,就没有Deck方法了,你的代码只会是:
//al.Deck();
Deck deck = new Deck();
//deck.Deck(); //no need for this line anymore
Run Code Online (Sandbox Code Playgroud)