Java: стек (удаление одного элемента из одного стека и добавление в другой стек путем ввода пользователем какого стека в какой стек - PullRequest
0 голосов
/ 26 мая 2018

Как сделать так, чтобы пользователь вводил данные, чтобы исключить элемент из стека A в стек B?Например, у меня есть 3 стека: st, st2, st3.Я хочу позволить пользователю выбирать, из какого стека он хочет исключить элемент и в какой стек он хочет добавить этот элемент.Допустим, пользователь вводит «От: 0 » и «Кому: 1 », что означает, что программа hv удаляет элемент из st и добавляет удаленный элемент в st2 .Я знаю, что один из способов как-то так: ' st2.push (st.pop ()) ', в котором удаляется элемент из стека st и добавляется к st2 стек.Но это то, что я хочу.Я хочу, чтобы это было так: st (i) .push (st (i) .pop ()) , в котором « i » указывает позицию стека, предполагаемую введенным пользователем.

И почему вызов hello [0] возвращает только ' bye ', а не весь st стек?

package stack; 
import java.util.*;
public class StackDemo {

public static void main(String args[]) {

  // creating stack
  Stack st = new Stack();
  Stack st2 = new Stack();
  Stack st3 = new Stack();

  // populating stack
  st.push("Java");
  st.push("Source");
  st.push("code");
  st2.push("hello");
  st3.push("bye");

  String[] hello = new String[3];
  st.toArray(hello);
  st2.toArray(hello);
  st3.toArray(hello);
  System.out.println("hello: ");
  System.out.println("Get 0: " + hello[0]);
 }
}

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Функция toArray (arrName) возвращает содержимое всего списка в виде массива, учитывая, что тип элементов в списке совпадает с типом массива arrName.

Не хранит ссылку на сам список.Я повторяю, он сохраняет только элементы в списке, если типы совпадают.В противном случае это вызывает исключение.ArrayStoreException выдается в случае несоответствия типов.

Для первой части вашего вопроса я бы сказал, поддерживает ArrayList типа Stack и добавляет в него объекты Stack.Затем вы можете получить доступ к ссылке на объекты стека, используя метод экземпляра get (index) ArrayList.

ArrayList<Stack> at = new ArrayList<>();
at.add(st);
at.get(0); //returns a reference to st
0 голосов
/ 26 мая 2018

Вызов toArray не добавляет значения в массив.Это из javadoc Vector.toArray

Возвращает массив, содержащий все элементы в этом векторе в правильном порядке;тип времени выполнения возвращаемого массива является типом указанного массива.Если Вектор помещается в указанный массив, он возвращается в него.В противном случае новый массив выделяется с типом времени выполнения указанного массива и размером этого вектора.

st.toArray(hello); //Now, the array contains [Java, Source, code]
st2.toArray(hello); //the array is now [hello, null, code]
st3.toArray(hello);//the array is now [bye, null, code]

Причина добавления null явно добавлена ​​в javadoc

Если вектор помещается в указанный массив с местом для резервирования (т. Е. Массив содержит больше элементов, чем вектор), элемент в массиве, следующий сразу за концом вектора, устанавливается равным нулю.

Чтобы скопировать содержимое трех стеков в массив, вы можете сделать

String[] myHello = new String[st.size() + st2.size() + st3.size()];
System.arraycopy(st.toArray(), 0, myHello, 0, st.size());
System.arraycopy(st2.toArray(), 0, myHello, st.size(), st2.size());
System.arraycopy(st3.toArray(), 0, myHello, st.size() + st2.size(), st3.size());

System.out.println(Arrays.toString(myHello)); //[Java, Source, code, hello, bye]

Обратите внимание, что поскольку вы используете raw type , вызывается st.toArray() возвращает Object[], а не String[].Итак, каждый из операторов копирования выдает предупреждение.

См. Что такое необработанный тип и почему мы не должны его использовать?

РЕДАКТИРОВАТЬ: Ваш вопрос и попытка показали разные намерения.Вышеприведенное поможет вам собрать элементы стека в один массив.Если вам нужно хранить сами стеки в массиве, вам нужно объявить Stack [] stacks = new Stack[3] и

stacks[0] = st;
stacks[1] = st2;
stacks[2] = st3;

С этим вы можете сделать stacks[i].push(stacks[i].pop());

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