如何在ArrayList上调用方法

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)

我根本无法弄清楚如何在列表中正确调用我的方法.有谁知道我做错了什么?

注意:这是一个辅助类文件,包的主类文件将只包含主要的测试方法.

Lui*_*oza 5

al是一个实例ArrayList,而ArrayList类没有Deck方法.你应该做的是声明和初始化一个Deck具有Deck方法的类型的变量:

//al.Deck();
Deck deck = new Deck();
deck.Deck(); //technically, this will do
Run Code Online (Sandbox Code Playgroud)

但似乎你想alDeck类构造函数中初始化变量中的元素,这是你目前没有的.构造函数是一个方法,它具有相同的类名,并且没有任何返回类型.所以这个方法:

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)

  • +1并且在java方法中,名称以小写开头 (2认同)
  • @nachokk你可以拥有以大写字母开头的方法,因为它可以正常编译.但它超出了社区标准. (2认同)