#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]