Создать и использовать ArrayList из одного метода? - PullRequest
0 голосов
/ 29 августа 2018

Можно ли создать и использовать 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 голосов
/ 29 августа 2018

Вы использовали неправильную стратегию проектирования для реализации этого класса. В вашей реализации много потоков, и здесь я не буду говорить о них. В рамках вашего подхода к проектированию вместо вызова реализованного поведения вызовите push() в вашем классе. Вы пытаетесь вызвать метод, который не реализован в этом классе и называется add(). Если вы хотите использовать свое поведение в классе, просто вызовите свой метод как smalls.push(elMin) вместо smalls.add(elMin).

0 голосов
/ 29 августа 2018

Попробуйте это:

Вызовите метод push для вставки elMin в ArrayList data.

0 голосов
/ 29 августа 2018

Вы не вызываете метод add для экземпляра Arraylist, а вместо этого вызываете его для экземпляра объекта класса MinStack, у которого нет add метода.

Вы должны вместо этого вызывать метод push, как это определено в вашем классе, который вызовет метод add массива. Или определить / переименовать (нажать) класс method в MinStack с именем add

0 голосов
/ 29 августа 2018

Я думаю, вы можете сделать это, как показано ниже:

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;
}
0 голосов
/ 29 августа 2018
smalls.add(elMin)

ищет метод добавления класса MinStack. Вы должны вызвать метод push для вставки elMin в data arrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...