Задачи на одномерные массивы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

1. Обчислити добуток і кількість від’ємних елементів масиву цілих чисел.

Scanner in=new Scanner(System.in);

System.out.print("Введите кол-во элементов в массиве: ");

int n=in.nextInt();

int[] sample = new int[n] ;

 

System.out.println("Массив:");

for (int i=0;i<sample.length;i++) {

sample[i]=(int)(Math.random()*11)-5;

System.out.print(sample[i]+"\t");

}

int p=1,count=0;

for (int t:sample)

if (t<0)

  {

  p*=t;

  count++;

  }

System.out.println();

System.out.print(p+"\t"+count);

 

2. Обчислити суму і кількість парних елементів масиву цілих чисел.

3. Обчислити середнє арифметичне та середнє геометричне елементів масиву цілих чисел.

4.  Замінити в масиві всі значення 0 на значення 1.

5. Створити масив, що містить літери російського алфавіту та вивести їх на екран.

char[] alphabet=new char[33];

for(int i=0;i<32;i++)

   {

    alphabet[i]=(char)('а'+i);//задаём алфавит русских букв

   }

    alphabet[32]='ё';//добавляем букву ё

 

    for (int i=0;i<alphabet.length;i++) {

   System.out.print(alphabet[i]+" ");//выводим алфавит

   }

    System.out.println();

 

6. Знайти максимальний елемент масиву і його індекс.

Scanner in=new Scanner(System.in);

System.out.print("Введите кол-во элементов в массиве: ");

int n=in.nextInt();

double [] sample = new double[n] ;

System.out.println("Массив:");

for (int i=0;i<sample.length;i++) {

sample[i]=(Math.random()*11)-5;

System.out.printf("%3.2f \t",sample[i]);

}

int index=0;

double max=sample[0];

for (int i=1; i<sample.length;i++)

 if (max<sample[i])

{

max=sample[i];

index=i;

}

 System.out.println();

 System.out.printf("%3.2f \t %1d",max,index);

 

 


 


Классические задачи с массивами

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

n-i-1 это просто формула для определения "противоположного" элемента массива

String[] a = { "Каждый "," охотник "," желает "," знать "," где "," сидит "," фазан "};

              //Выводим изначальный массив в консоль

              for (int i=0; i<a.length; i++){

                       System.out.print(a[i]);

              }

              System.out.println();

        int n = a.length;

              //Переменная, которая будет использоваться при обмене элементов

              String temp;

 

              for (int i = 0; i < n/2; i++) {

              temp = a[n-i-1];

              a[n-i-1] = a[i];

              a[i] = temp;

              }

              //Выводим конечный массив в консоль

              for (int i=0; i<a.length; i++){

                       System.out.print(a[i]);

              }

 

 

Следующий пример тоже может быть признан классикой — это сортировка массива методом «пузырька». Далеко не самый эффективный способ сортировки, но в качестве примера очень даже неплохо. Сортировка по ВОЗРАСТАНИЮ производится по следующему алгоритму: сравниваются два находящихся рядом элемента массива. Если первый элемент больше второго, то их надо поменять местами. При каждом проходе по всему массиву элементы с меньшим значением потихонечку передвигаются к началу — «всплывают». Отсюда и название метода. Проход по всем элементам повторяется до тех пор, пока хоть одна пара элементов поменялась местами.

int[] sample = {12, 56, 7, 34, 89, 43, 23, 9};

 

// выставляем признак "обмена" переменных в true, чтобы начать цикл

//true- если обмен произошел, false – обмена нет

boolean changed = true;

 

// цикл длится до тех пор, пока при проверке массива ни одного обмена не произошло

while (changed) {

// Надеемся, что обмена данных не будет

changed = false;

// Проходим по всему массиву

for (int i = 0; i < sample.length - 1; i++) {

// Если впереди стоящее число больше, чем следующее - меняем

// их местами и выставляем признак, что был обмен

if (sample[i] > sample[i + 1]) {

// Производим обмен с использованием дополнительной переменной

int tmp = sample[i];

sample[i] = sample[i + 1];

sample[i + 1] = tmp;

// Выставляем признак обмена в true

changed = true;

}

}

}

// Выводим отсортрованный массив

for (int i = 0; i < sample.length; i++) {

System.out.println(sample[i]);

}

Раздача карт в покере в Java

https://vertex-academy.com/tutorials/ru/razdacha-kart-v-pokere-java/

 

Напишите программу, которая должна имитировать раздачу карт для игры в покер. Программа получает число n, задаваемое с консоли пользователем, и раздает карты на n игроков (по 5 карт каждому) из рассортированной колоды. Разделяйте пять карт, выданных каждому игроку, пустой строкой.

 

import java.util.Scanner;

public class Deal {

public static void main(String[] args) {

 

// часть 1 - инициализацияпеременных

int cardsPlayer = 5;

int players =0 ;      

               

String[] suits = {

                  "Пик", "Бубен", "Черв", "Треф"

              };

String[] rank = {

                       "2", "3", "4", "5", "6", "7", "8", "9", "10",

                       "Валет", "Королева", "Король", "Туз"

              };

               

int n = suits.length * rank.length; // количествокарт

               

// часть 2 - ввод с консоли

for(;;){

    Scanner sc = new Scanner(System.in);

    System.out.println("Введите количество игроков: ");  

    if(sc.hasNextInt()){

    players = sc.nextInt();

    if (players ==0){

              System.out.println("Игра прекращена.");

              break;

              }

    if (players<0){

              System.out.println("Число игроков не может быть меньше 0");

              break;

              }

    if(cardsPlayer * players <= n){

              break;

              } else {

                       System.out.println("Слишком много игроков!");

                       }

     }else{

              System.out.println("Вы ввели не число!");

       }

}

// часть 3 - инициализацияколоды

String[] deck = new String[n];

for (int i = 0; i < rank.length; i++) {

for (int j = 0; j < suits.length; j++) {

    deck[suits.length*i + j] = rank[i] + " " + suits[j];

}

}

               

// часть 4 - перетасовкаколоды

for (int i = 0; i < n; i++) {

int r = i + (int) (Math.random() * (n-i)); // случайнаякарта в колоде

String temp = deck[r];

deck[r] = deck[i];

deck[i] = temp;

}

               

// часть 5 - перетасованнаяколодавыводитсянаэкран

for (int i = 0; i < players * cardsPlayer; i++) {

System.out.println(deck[i]);

if (i % cardsPlayer == cardsPlayer - 1)

    System.out.println();

}

}

}

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

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

Что самое сложное? Тасовка карт. Но оно в целом основывается на задаче смене местами элементов массива. Но в прошлой задачи мы "переворачивали", а в этой меняться местами должны случайные карты. Случайные карты - значит будем использовать (псевдо)случайные числа.

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

 

Итак, разберем все части по порядку:

Часть 1 - инициализация переменных. Мы создаем переменные:

cardsPlayer - хранит количество карт на одноо игрока (5), заданное в условии. Эта переменная имеет тип int, а не, например, byte, потому что в процессе приведения типов в выражениях она все равно будет приводится в типу int - так что другой тип не будет оптимизировать эту программу.

players - объявляем переменную и временно задаем ей значение 0. Если этого не сделать, часть, в которой работаем с консолью (часть 2) будет работать неисправно.

Массив suits - хранит масти карт.

Массив rank - хранит ранги карт. Обратите внимание: это массив строк String, и элементы "2", "3", "4" и другие - тоже строки, к ним нельзя обращаться как к числовым значениям.

n - хранит общее количество карт в колоде. Для того, чтобы посчитать, сколько в колоде карт, умножаем количество мастей на количество рангов ( длину массива suits на длину массива rank).

Часть 2 - верификация введенной переменной. Эта часть в целом должна быть Вам знакома из решения других задач. Ее общий смысл - попросить ввести параметр заново, если он неправильно задан с консоли. Например, наш параметр - количество людей. Он не может быль меньше нуля. Он не может быть равным строке, и мы должны убедиться, что карт в колоде хватит на всех игроков. Для этого использованы условия if.

Часть 3 - инициализация колоды. Создается новый массив deck, который хранит полные названия карт "Дама Треф", "Король Пик" и т.д. Названия создаются с помощью конкатенации названий рангов и названий мастей.

Часть 4 - перетасовываем колоду. Как уже говорилось, принцип очень похож на предыдущую задачу. В этом блоке создается цикл, в котором каждая карта в колоде по очереди меняется местами с другой картой, которая определяется случайно с помощью Math.random().

Часть 5 - раздаем карты. Как в покере карты просто раздаются сверху перетасованной колоды, так и в программе - берется подряд по пять карт для каждого игрока. Цикл выполняется 5*количество_игроков раз, и через каждые 5 карт ставит пустую строку:

  if (i % carsPlayer == cardsPlayer - 1) { System.out.println(); }

Тут нет простого и понятного " if ( i%5 == 0 ) ", потому что i начинается с 0. Если так написать, первому игроку досталось бы 6 карт. Постоянный остаток от деления тут равен не 0, а 4 (т.е. cardsPlayer - 1).

 

 

 


Для работы с массивами в библиотеке классов Java в пакете java.util определен специальный класс Arrays. С его помощью мы можем производить ряд операций над массивами.

 


Копирование массивов

Массивы, также как и переменные, мы можем присваивать:

  int[] numbers = new int[] { 1, 2, 3, 5 }; int[] figures = numbers;   figures[2]=30; System.out.println(numbers[2]); // равно 30

Здесь два массива, второму присваивается первый массив. Однако на самом деле при присвоении переменная figures будет хранить ссылку на область в памяти, где находится массив. В итоге и figures и numbers будут указывать на один и тот же массив, и если мы изменим элемент в массиве figures figures[2]=30, то изменится и массив numbers, так как это фактически один и тот же массив. Чтобы такой проблемы избежать, надо использовать копирование массивов.

Для копирования используется метод Arrays.copyOf:

 

  import java.util.Arrays; public class Program { public static void main(String[] args) { int[] numbers = new int[] { 1, 2, 3, 5 }; int[] figures = Arrays.copyOf(numbers, numbers.length); figures[2]=30; System.out.println(numbers[2]); // равно 3 } }

Метод Arrays.copyOf(numbers, numbers.length) принимает два параметра: первый параметр - массив, который надо скопировать, а второй параметр - сколько элементов надо скопировать.

Сортировка

С помощью метода Arrays.sort можно отсортировать массив:

  // элементы массива в произвольном порядке int[] numbers = new int[] { 1, 7, 3, 5, 2, 6, 4 };   Arrays.sort(numbers);   // в цикле выводим все элементы массива по порядку for(int i=0;i<numbers.length;i++) System.out.println(numbers[i]);

Многомерные массивы

Многомерный массив в Java по сути является массивом из массивов. Т.е. Вы создаете массив, внутри которого находятся указатели на одномерные массивы — массив массивов.

Популярным примером использования такого рода массивов, являются матрицы, для представления которых, используются двумерные массивы. Итак, что же такое матрица и как ее представить с помощью двумерного массива в Java.

Матрица это прямоугольная таблица, состоящая из строк и столбцов на пересечении которых находятся её элементы. Количество строк и столбцов матрицы задают ее размер.

Общий вид матрицы размером m x n ( m — количество строк, n — количество столбцов), выглядит следующим образом:

 

Это математическая нумерация строк и столбцов. В программировании всё нумеруется с 0. Каждый элемент матрицы имеет свой индекс, где первая цифра обозначает номер строки на которой находится элемент, а вторая — номер столбца.

Рассмотрим примеры конкретных матриц и создадим их с помощью Java.

Матрица A имеет размерность 2 на 3 (2 строки, 3 столбца).

Нумерация элементов матрицы А в программировании:

 

Создадим двухмерный массив этой размерности:

int[][] matrixA= new int[2][3];

 

Для доступа к элементам двумерного массива необходимо использовать 2 индекса: первый для строки, второй – для столбца. Как и в случае с одномерными массивами, индексы также начинаются с нуля. Поэтому нумерация строк и столбцов в таблице начинается с 0.

matrixA[0][0] = 1;

matrixA[0][1] = -2;

matrixA[0][2] = 3;

matrixA[1][0] = 4;

matrixA[1][1] = 1;

matrixA[1][2] = 7;

 

Для того, чтобы вывести матрицу на консоль, нужно пройти все элементы, используя два цикла. Количество циклов, при прохождении элементов массива, равно его размерности. В нашем случае первый цикл осуществляется по строкам, второй — по столбцам. Первый цикл for перебирает каждую строку двумерного массива, второй цикл for перебирает столбцы в этой строке.

 

for (int i = 0; i < 2; i++) {

for (int j = 0; j < 3; j++) {

   System.out.print(matrixA[i][j] + "\t");

}

System.out.println();

}

Или

for (int i = 0; i < matrixA.length; i++) {

for (int j = 0; j < matrixA[i].length; j++) {

   System.out.print(matrixA[i][j] + "\t");

}

System.out.println();

}

 

То есть, сначала выводим все элементы первой строки, отделяя их символом табуляции "\t", переносим строку и выводим все элементы второй строки.

Чтобы организовать генерацию элементов матрицы и сразу же вывод на экран, надо:

        for (int i = 0; i < 2; i++) {

               for (int j = 0; j < 3; j++) {

               matrixA[i][j]=(int)(Math.random()*11)-5;

           System.out.print(matrixA[i][j] + "\t");

 

               }

          System.out.println();

        }

 

Для матрицы B воспользуемся упрощенным способом инициализации — в момент объявления. По аналогии с одномерными массивами.

int[][] matrixB = {

{-9,1,0},

{4,1,1},

{-2,2,-1}

};

Каждую строку массива необходимо заключить в пару фигурных скобок и отделить друг от друга запятой.

Полностью код для матрицы B:

public class Matrix {

 

public static void main(String[] args) {

 

        int[][] matrixB = {

                    {-9,1,0},

                    {4,1,1},

                    {-2,2,-1}

        };                     

 

        for (int i = 0; i < 3; i++) {

               for (int j = 0; j < 3; j++) {

               System.out.print(matrixB[i][j] + "\t");

               }

               System.out.println();

           }

}

}

 

Дата: 2018-11-18, просмотров: 1070.