Напишите код который меняет порядок расположения элементов внутри массива на обратный
Перейти к содержимому

Напишите код который меняет порядок расположения элементов внутри массива на обратный

Обратный массив домашнего задания Java

Тема: Одномерный массив

Напишите программу на Java, которая сначала считывает размер одномерного массива, считывает каждый элемент массива типа double, меняет порядок этого одномерного массива на обратный. Не создавайте другой массив для хранения результата. Подсказка: используйте код в тексте для обмена двумя элементами.

Пример вывода:

Введите размер массива: 4

Введите 4 двойных числа: 1.0, 2.0, 3.0, 4.0

В обратном порядке: 4.0, 3.0, 2.0, 1.0

У меня 2 проблемы с заданием. Интересно, может ли кто-нибудь помочь мне найти решение.

  1. Мне нужно заполнить значения массива (double [] myArray) с помощью
    Ввод сканера из одной строки для нескольких дублей.
  2. Мне нужно изменить порядок значений внутри массива БЕЗ использования второго массива.

Пока это мой код.

Моя проблема в том, что когда ввод для двойников предоставляется пользователем, консоль переходит к следующей строке, все еще ожидая ввода, если ввод задан, ArrayIndexOutOfBounds выбрасывается

7 ответов

Мне нужно заполнить значения массива (double [] myArray), используя ввод Scanner из одной строки для нескольких удвоений.

Если я правильно это понимаю, сначала вам нужно прочитать всю строку, а затем проанализировать ее, чтобы прочитать все двойные значения из нее. Чтобы прочитать всю строку двойников от пользователя, вы можете вызвать nextLine из сканера, который обрабатывает поток System.in . Тогда вы можете либо

  • split в строке пробелов и используйте Double.parseDouble(String) (чтобы получить double из String ) для каждого элемента String из массива результатов
  • оберните эту строку другим сканером и используйте его nextDouble .

Кстати, если вы хотите прочитать следующую строку после nextDouble (или nextInt или nextAnythingExceptLine ), вам нужно использовать напоминания о разделителях строк с помощью другого метода nextLine (подробнее здесь Сканер пропускает nextLine () после использования next (), nextInt () или других методов nextFoo () ).

Итак, первая часть вашего задания может выглядеть так:

Вторая проблема заключается в том, что дженерики не поддерживают примитивные типы, поэтому < > в asList(T..) может быть только типом объекта. К сожалению, автобокс работает только с примитивными типами, поэтому double[] нельзя повысить до Double[] , потому что каждый массив уже является объектом (даже массивы примитивных типы).
Это означает, что результат Arrays.asList(T.. data) для аргумента myArray типа double[] не вернет List<double> или List<Double> , но List<double[]> — список, содержащий один объект, переданный массив, а не элементы этого массива. Вот почему реверсирование не работает для вас (реверсивный список, содержащий один элемент, ничего не меняет, так как вы не можете переупорядочить список только с одним элементом).

Чтобы решить эту проблему, просто измените тип myArray формы double[] (массив примитивных типов) на Double[] (массив типов объектов), чтобы разрешить универсальному типу T с asList(T..) представляют собой непримитивный Double (в противном случае T можно вывести только как непримитивный тип double[] ).

Так что измени свою линию

Вы что-то здесь неправильно поняли.

В Collections.reverse(Arrays.asList(myArray)); вы используете Arrays.asList(myArray) , который возвращает новый List . Впоследствии вы меняете его, но не присваиваете его переменной, и вы просто теряете его.

Это не то, как вам нужно.

Вам нужно придумать другой способ сделать это.

Я дам вам подсказку: используйте подсказку в вопросе!

И если вы говорите, что вам просто нужно перевернуть это, зачем вам это сортировать ?!

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

Прежде всего: Arrays.asList получить переменные объекта, и если вы передадите примитивный массив, вы получите список примитивных массивов.

Второй момент: Arrays.asList возвращает список. И если вы изменили его список, ваш исходный массив (из которого вы создаете список) не будет изменен.

Вы должны сделать коллекцию вместо массива и отменить ее. Например:

Используйте это, чтобы перевернуть ваш массив.

Вам нужно получить половину длины массива, чтобы получить полную обратную сторону массива

Reverse Array не могу вывести с цикла [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 3 месяца назад .

введите сюда описание изображенияpublic class ReverseArray <

//застрял на элементарном функция разворачивает массив но как вывести результат из цикла?

Строго говоря, если просто меняется порядок элементов во входном массиве, метод reverse не обязан возвращать тот же самый массив и потому может иметь тип void (как и Arrays.sort ).

Для перестановки элементов нужно просто пройти входной массив до середины, переставляя первый и последний элементы:

Для массивов примитивных типов int[] , long[] , double[] , и т.д. потребуется написать отдельные перегруженные методы:

Как поменять элементы массива в обратном порядке в Java

Напишите программу, которая меняет местами элементы одномерного массива из String в обратном порядке. Не используйте дополнительный массив для хранения результатов.

Решение:
Комментарии к задаче:

В результате выполнения этого кода получим перевернутый массив: вместо «Каждый охотник желает знать где сидит фазан» — «фазан сидит где знать желает охотник Каждый «

Как была решена задача? Основная ее часть — это фрагмент:

Он по очереди меняет местами противоположные элементы массива, используя как посредника дополнительную переменную String temp (temp — от temporary, «временный»). Можно было бы обойтись и без нее, если бы массив хранил переменные числового типа.

Тут есть a[i] и малопонятное a[n-i-1]. Но на самом деле n-i-1 это просто формула для определения «противоположного» элемента массива:

task2_arr_prince

Если бы мы имели массив, который бы состоял из элементов a, b, c, d, e и f, то есть массив из 6 элементов (n=6), «противоположным» (то есть элементом a[n-i-1]) для каждого из них были бы f для a, e для b и d для c. Цикл из фрагмента кода выполнялся бы три раза, до элемента d (i=0, 1, 2). Граница выполнения массива показана оранжевой линией на рисунке.

Так, обратите внимание, что мы не должны проходить циклом весь массив, чтобы поменять его элементы местами.

Надеемся — наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *