从单个方法中创建和使用ArrayList?

时间:2018-08-29 04:22:58

标签: java arraylist collections

是否可以在方法内创建和使用ArrayList?我想在public int min()方法中创建一个临时堆栈以跟踪最小值。但是,编译器抱怨ArrayList add()方法:Cannot resolve method 'add(int)'我猜想那是因为我试图在创建ArrayList的同一方法中运行它?

import java.util.*;

public class MinStack {
private ArrayList<Integer> data;


public MinStack() {
    data = new ArrayList<Integer>();
}

public void push( int a ) {
    data.add( a );
}

public int pop() {
    if ( data.size() <= 0 ) {
        throw new IllegalStateException();
    }
    return data.remove( data.size() - 1 );
}

public int size() {
    return data.size();
}

public int min() {
    MinStack smalls = new MinStack();
    int elMin = (data.get((data.size() - 1)));
    smalls.add(elMin);
    while (!data.isEmpty()) {
        if (data.get(data.size() - 1) < elMin)
        elMin = data.get(data.size() - 1);
    }
    return elMin;
}

5 个答案:

答案 0 :(得分:3)

您不是在add的实例上调用Arraylist方法,而是在没有MinStack方法的add类对象的实例上调用它

您应该调用push方法,而不是在您的类中定义的方法,该方法将调用arraylist的add方法。否则在method类中定义/重命名(推送)MinStack类中的add

答案 1 :(得分:2)

您使用了不合适的设计策略来实现此类。它们在您的实现中有很多流程,在这里我不再谈论这些。在您的设计方法中,不要在类中调用实现的行为,而是调用push()。您正在尝试调用在名为add()的此类中未实现的方法。如果要在类中使用冒犯的行为,只需将您的方法调用为smalls.push(elMin)的{​​{1}}。

答案 2 :(得分:1)

smalls.add(elMin)

正在寻找MinStack类的添加方法。您应该调用push方法在数据arrayList中插入elMin。

答案 3 :(得分:1)

我认为您可以按照以下步骤进行操作:

public int min() {

    if(data.isEmpty())
        throw new RuntimeException("the list is empty...");
    int elMin = data.get(0);
    for(int i : data) {
        if(i < elMin) {
            elMin = i;
        }
    }
    return elMin;
}

答案 4 :(得分:0)

尝试一下:

调用push方法将elMin插入ArrayList data