Использование очереди для перестановки всех остальных целых чисел

#java

#Ява

Вопрос:

Я пытаюсь понять, как взять целое число и переставить их так, чтобы каждый переменный символ был сохранен (так что [1, 2, 3, 4, 5, 6] бы вернулся [1, 4, 2, 5, 3, 6]). Я думаю, что для решения этой проблемы лучше всего использовать очередь, так что вот что у меня есть на данный момент. Он возвращается [3, 1, 4, 5, 2, 6], но я не уверен, как я могу заставить его вернуть переменную форму выше :

 import java.util.*; public class everyOtherInteger { public static void main(String[] args) {   Queue lt;Integergt; sort = new LinkedListlt;Integergt;();  String s = "123456";    for (int i = 0; i lt; s.length(); i  ) {  sort.add(Integer.parseInt(s.charAt(i)   ""));   if (i%2 == 0) {  int a = sort.remove();  sort.add(a);  }  else {   }  }    System.out.println(sort); }  

}

Комментарии:

1. «Очередь» на самом деле не должна быть «отсортирована». Вопрос: Почему бы просто 1) не использовать свой список ссылокlt;intgt; (или список массивовlt;intgt;lt;intgt;), 2) Добавить все остальные элементы из вашей входной строки (измените «i » на «i = 2», 3) отсортируйте список, когда закончите?

2. Не имеет отношения, но зачем ты это делаешь Integer.parseInt(s.charAt(i) "") ?

3. @paulsm4, я не уверен, что вы подразумеваете под сортировкой, не могли бы вы уточнить, пожалуйста?

4. @OneCricketeer, это для того, чтобы я мог хранить каждое отдельное целое число из строки в своей очереди

5. Почему бы не сделать цикл от 1 до 6? Тебе не нужна ниточка

Ответ №1:

Просто составьте список по-другому. Очередь не требуется.

Вы можете добавить половину чисел в начале, остальные-между каждым.

 Listlt;Integergt; nums = new ArrayListlt;gt;();  Scanner sc = new Scanner(System.in); int limit = sc.nextInt(); // 6 int value = 1; for (int i = 0; i lt; limit / 2; i  ) {  nums.add(value  ); } for (int i = 1; i lt; limit; i =2) {  nums.add(i, value  ); } System.out.println(nums); // [1, 4, 2, 5, 3, 6]  

Ответ №2:

Я бы просто добавил их один за другим в одном цикле. Второй элемент-это просто текущий элемент плюс смещение, где смещение составляет половину длины массива.

  • считайте число в виде строки.
  • и работайте с символьным массивом цифр.
 Scanner input = new Scanner(System.in); String val = input.next(); Listlt;Integergt; result =new ArrayListlt;gt;();  char[] digits = val.toCharArray(); int half = digits.length/2; for(int i = 0; i lt; half; i  ) {  result.add(digits[i]-'0');  result.add(digits[i half]-'0'); } System.out.println(result);  

Для ввода 123456 , печатает

 [1, 4, 2, 5, 3, 6]