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, просмотров: 1139.