Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 28.08.2018
Сообщений: 49

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

10.06.2019, 12:23. Показов 4022. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Есть код, который делает симуляцию броска 5 шестигранных кубика и записывает их результаты в массив. У игрока есть 3 попытки перебросить кубики, при этом он может перебросить все, что легко, а может перебросить только те, какие сам пожелает.

В мейне мы кидаем кубики и выводим результат в консоль:
Java
1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Scanner;
 
class Main {
  public static void main(String[] args) {
    Dice dice = new Dice();
    Scanner scanner = new Scanner(System.in); 
    dice.rollDice();
    System.out.println("d1 - " + dice.rollDiceResult[0] + "\nd2 - " + dice.rollDiceResult[1] + "\nd3 - " + dice.rollDiceResult[2] + "\nd4 - " + dice.rollDiceResult[3] + "\nd5 - " + dice.rollDiceResult[4]);
 
    String one = scanner.nextLine();   
  }
}
В Dice мы все это реализуем и записываем результаты:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Random;
 
class Dice {
  Random random = new Random();
  int[] rollDiceResult = new int[5];
 
  int dice(int max) {
    int dice = random.nextInt(max);
    return dice + 1;
  }
 
  void rollDice() {
    rollDiceResult[0] = dice(6);
    rollDiceResult[1] = dice(6);
    rollDiceResult[2] = dice(6);
    rollDiceResult[3] = dice(6);
    rollDiceResult[4] = dice(6);
  }
 
}
Подскажите, или намекните, как реализовать выбор игрока, какие кубики ему перебрасывать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2019, 12:23
Ответы с готовыми решениями:

Запрос LINQ к List, как выбрать определенный элемент из списка
Подскажите как выбрать определенный элемент из списка? public class PostTarif { public double Weight {...

Как вычесть определенный элемент массива из другого массива?
#include <iostream> #include <math.h> #include <iomanip> #include <stdio.h> #include <stdlib.h> #include <conio.h> #include...

Как вызвать определенный элемент из массива?
Хочу создать диалоговое окно,в котором элементы преобразовывались в массив с помощью split. И чтобы по итогу элементы можно было...

12
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
10.06.2019, 12:31
сделай класс Dice, который соответствует одному кубику (а не шести). В нем сделай метод roll, который будет кидать один кубик. Дальше наверно понятно
0
0 / 0 / 0
Регистрация: 28.08.2018
Сообщений: 49
10.06.2019, 12:50  [ТС]
Зачем класс отдельный? может переменную?

Так вот я сделал, есть способ легче сделать этот процесс?

Выходит массив вообще не имеет смысла юзать?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.util.Scanner;
 
class Main {
  public static void main(String[] args) {
    Dice dice = new Dice();
    Scanner scanner = new Scanner(System.in);
        System.out.println("d1 - " + dice.rollDiceResult[0] + "\nd2 - " + dice.rollDiceResult[1] + "\nd3 - "
        + dice.rollDiceResult[2] + "\nd4 - " + dice.rollDiceResult[3] + "\nd5 - " + dice.rollDiceResult[4]);
 
    for (int i = 0; i < 3; i++) {
      String one = scanner.nextLine();
      switch (one) {
      case "y":
        dice.rollOne();
      default:
        break;
      }
      String two = scanner.nextLine();
      switch (two) {
      case "y":
        dice.rollTwo();
      default:
        break;
      }
      String three = scanner.nextLine();
      switch (three) {
      case "y":
        dice.rollThree();
      default:
        break;
      }
      String four = scanner.nextLine();
      switch (four) {
      case "y":
        dice.rollFour();
      default:
        break;
      }
      String five = scanner.nextLine();
      switch (five) {
      case "y":
        dice.rollFive();
      default:
        break;
      }
      System.out.println("d1 - " + dice.rollDiceResult[0] + "\nd2 - " + dice.rollDiceResult[1] + "\nd3 - "
        + dice.rollDiceResult[2] + "\nd4 - " + dice.rollDiceResult[3] + "\nd5 - " + dice.rollDiceResult[4]);
    }
  }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.Random;
 
class Dice {
  Random random = new Random();
  int[] rollDiceResult = new int[5];
 
  int dice(int max) {
    int dice = random.nextInt(max);
    return dice + 1;
  }
 
  void rollOne() {
    rollDiceResult[0] = dice(6);
  }
 
  void rollTwo() {
    rollDiceResult[1] = dice(6);
  }
 
  void rollThree() {
    rollDiceResult[2] = dice(6);
  }
 
  void rollFour() {
 
    rollDiceResult[3] = dice(6);
  }
 
  void rollFive() {
 
    rollDiceResult[4] = dice(6);
  }
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
10.06.2019, 12:54
Цитата Сообщение от Poreyzmih Посмотреть сообщение
Зачем класс отдельный?
ты за советом пришел или поспорить?
0
0 / 0 / 0
Регистрация: 28.08.2018
Сообщений: 49
10.06.2019, 13:11  [ТС]
За советом, по этому и спрашиваю: "зачем класс отдельный, может переменную?". Это вопрос был, совета спрашиваю: "может переменную?"
Был бы спор, я бы написал:
Зачем класс отдельный, если можно сделать так то так то, а потом вот так вот и вот так, ты не прав, а я прав.
Логично же, вопрос-ответ.
В чем преимущество отдельных классов-кубиков, от переменных кубиков?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
10.06.2019, 13:24
Инкапсуляция, ООП - слышал?
Можно конечно и без этого всего обойтись
Java
1
2
3
4
5
6
7
8
9
int[] dice = ThreadLocalRandom.current().ints(NUMBER_OF_DICE, MIN_DICE_VALUE, MAX_DICE_VALUE + 1).toArray();
        System.out.println(Arrays.toString(dice));
        Scanner scanner = new Scanner(System.in);
        String diceToChangeInput = scanner.nextLine();
        int[] diceToChange = Arrays.stream(diceToChangeInput.split("\\D+")).mapToInt(Integer::parseInt).toArray();
        for (int diceIndex : diceToChange) {
            dice[diceIndex] = ThreadLocalRandom.current().nextInt(MIN_DICE_VALUE, MAX_DICE_VALUE + 1);
        }
        System.out.println(Arrays.toString(dice));
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
10.06.2019, 14:05
Poreyzmih, если долго и внимательно смотреть на твой код, то можно увидеть самый страшный грех разработки - дублирование. Причем много. Как минимум(если твой вариант рабочий) стоит устранить дублирование
0
0 / 0 / 0
Регистрация: 28.08.2018
Сообщений: 49
10.06.2019, 14:33  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
Poreyzmih, если долго и внимательно смотреть на твой код, то можно увидеть самый страшный грех разработки - дублирование. Причем много. Как минимум(если твой вариант рабочий) стоит устранить дублирование
Тыкните, пожалуйста, пальцем, я буду работать над собой)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
10.06.2019, 14:37

Не по теме:

xoraxax тыкает пальцем в глаз Poreyzmih


Цитата Сообщение от Poreyzmih Посмотреть сообщение
String one = scanner.nextLine();
* * * switch (one) {
* * * case "y":
* * * * dice.rollOne();
* * * default:
* * * * break;
* * * }
* * * String two = scanner.nextLine();
* * * switch (two) {
* * * case "y":
* * * * dice.rollTwo();
* * * default:
* * * * break;
* * * }
* * * String three = scanner.nextLine();
* * * switch (three) {
* * * case "y":
* * * * dice.rollThree();
* * * default:
* * * * break;
* * * }
* * * String four = scanner.nextLine();
* * * switch (four) {
* * * case "y":
* * * * dice.rollFour();
* * * default:
* * * * break;
* * * }
* * * String five = scanner.nextLine();
* * * switch (five) {
* * * case "y":
* * * * dice.rollFive();
* * * default:
* * * * break;
* * * }
Цитата Сообщение от Poreyzmih Посмотреть сообщение
void rollOne() {
* * rollDiceResult[0] = dice(6);
* }
void rollTwo() {
* * rollDiceResult[1] = dice(6);
* }
void rollThree() {
* * rollDiceResult[2] = dice(6);
* }
void rollFour() {
rollDiceResult[3] = dice(6);
* }
void rollFive() {
rollDiceResult[4] = dice(6);
* }
0
 Аватар для Aviz__
2757 / 2064 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
10.06.2019, 15:44
Poreyzmih, во, тебе на подумать)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Helper {
 
    public static void main(String[] args) {
        Dice dice = new Dice();
        dice.roll();
        System.out.println(dice.getPartResult(0));
        System.out.println(dice.getPartResult(2));
        System.out.println(dice.getPartResult(4));
        System.out.println("Еще бросать");
        dice.roll();
        System.out.println(dice.getPartResult(0));
        System.out.println(dice.getPartResult(2));
        System.out.println(dice.getPartResult(4));
    }
 
}
 
import java.util.Random;
class Dice {
    private Random random = new Random(System.currentTimeMillis());
    private int[] rollDiceResult = new int[5];
 
    public void roll() {
        for (int i = 0; i < rollDiceResult.length; i++) {
            rollDiceResult[i] = 1 + random.nextInt(6);
        }
    }
 
    int getPartResult(int indexPart){
        try {
            return rollDiceResult[indexPart];
        }catch (IndexOutOfBoundsException e) {
            System.out.println("Нет такого номера кубика!");
        }
        return 0;
    }
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
10.06.2019, 18:04
Цитата Сообщение от Poreyzmih Посмотреть сообщение
Зачем класс отдельный? может переменную?
Основная парадигма Java - "Всё есть класс", и лучше привыкнуть её придерживаться. Написать дюжину "лишних" строк особо не утомит, а вот жизнь облегчить сможет...

Ещё вариант того же самого...
Dice.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Random;
 
public class Dice {
    public static final int SIDES = 6;
 
    private int top  = SIDES;
    private Random rand;
 
    public Dice() {
        rand = new Random();
    }
 
    public Dice(Random rnd) {
        rand = rnd;
    }
 
    public void rotate() {
        top = rand.nextInt(SIDES) + 1;
    }
 
    public int onTop() {
        return top;
    }
}
DicesSet.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Random;
 
public class DicesSet {
    private int count;
    private Dice[] dices;
    private Random rand;
 
    public DicesSet(int dices_count) {
        count = dices_count;
        dices = new Dice[count];
        rand = new Random();
        for ( int i = 0; i < count; ++i )
            dices[i] = new Dice(rand);
    }
 
    public void rotateAll() {
        for ( int i = 0; i < count; ++i )
            dices[i].rotate();
    }
 
    public int[] topsAsArray() {
        int[] ret = new int[count];
        for ( int i = 0; i < count; ++i )
            ret[i] = dices[i].onTop();
 
        return ret;
    }
}
Main.java
Java
1
2
3
4
5
6
7
8
9
10
11
import java.util.Arrays;
 
public class Main {
    public static void main(String[] args) {
        DicesSet ds = new DicesSet(6);
        for ( int i = 0; i < 3; ++i ) {
            ds.rotateAll();
            System.out.println(Arrays.toString(ds.topsAsArray()));
        }
    }
}
out
Code
1
2
3
[5, 5, 2, 5, 5, 6]
[5, 2, 4, 6, 4, 1]
[1, 5, 5, 2, 5, 2]
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
10.06.2019, 19:06
Цитата Сообщение от easybudda Посмотреть сообщение
Основная парадигма Java - "Всё есть класс"

Не по теме:

Нет такой парадигмы.

0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
11.06.2019, 00:10
Poreyzmih,
Как бы я решал такую задачу:
У вас есть кубик один. У вас как бы заготовка под кубик.
На основе этой заготовки вы делаете остальные кубики их всего 5.
Все кубики одинаковые, они состоят из 6-ти граней.
Бросок кубика - это какое-то действие - то есть метод.
Нужно подумать, что делает метод.

У вас тогда задача разделяется на мелкие подзадачи.
1. Вам нужно создать класс кубик, который содержит в себе 6 граней.
2. На основе этого класса создать 5 экземпляров.
3. Кубик состоит из 6-ти граней. То есть ваш класс может содержать в себе шесть граней.

Всё. Задача практически решена.
Осталось выбрать подходящие структуры данных.
Вам нужно выбрать структуру данных для грани.
Класс кубик будет содержать в себе эти грани.

И вам не нужно делать это всё в уме. Просто нарисуйте кубик с шестью гранями.
Кубики у вас одинаковые. И экземпляры кубика их всего 5. Это будут экземпляры вашего класса кубика.

Добавлено через 14 минут
Еще некоторое дополнение.
Еще один метод.
check() - вам нужно создать метод который выбирает определенный кубик и,
например checkAll() выбрать все кубики.
Ваш кубик будет содержать переменную boolean isChecked.
Которая означает выбран кубик для броска или нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2019, 00:10
Помогаю со студенческими работами здесь

Как удалить определенный элемент массива
Как удалить определенный элемент массива допустим массив из 20 чисел мне надо удалить 19 и так чтобы потом массив был из 19 чисел.

Как выбрать элемент массива?
Приветствую всех. array ( 'ID' =&gt; '38', '~ID' =&gt; '38', 'IBLOCK_ID' =&gt; '5', '~IBLOCK_ID' =&gt; '5', 'IBLOCK_SECTION_ID'...

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

Как выбрать максимальный элемент из данного массива?
Как выбрать элемент массива, у которого в подмассивк элемент countOflikes имеет максимальное число?

Выбрать из массива минимальный элемент, если таких несколько то выбрать все
Выбрать из массива минимальный элемент, если таких несколько то выбрать все


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru