Как cделать рейтинг игроков? (java)

123
24 мая 2021, 22:10

Есть код игры "Угадай число". Но рейтинг участников вывести не могу.Пробовала array.sort(). Проблема в том, что его необходимо выводить вместе с именами участников. Если отсортировать массив с результатами int, то как в таком же порядке отсортировать имена. Пробовала через min, но как каждый раз выводить минимальное число, не считая предыдущего. Вообщем, запуталась. Помогите, плиз)

package guessthenumber;
import java.util.Scanner;
import java.util.Random;
import java.util.Arrays;
public class GuessTheNumber {

    public static void main(String[] args) {
        thePlay play1 = new thePlay();
        play1.play();
        System.out.println("Игроку по именем "+play1.thename+" понадобилось "+play1.attempts+" попыток.");
        thePlay play2 = new thePlay();
        play2.play();
        System.out.println("Игроку по именем "+play2.thename+" понадобилось "+play2.attempts+" попыток.");
        thePlay play3 = new thePlay();
        play3.play();
        System.out.println("Игроку по именем "+play3.thename+" понадобилось "+play3.attempts+" попыток.");
        int [] mas = new int[] {play1.attempts,play2.attempts,play3.attempts};
        String [] mas2 = new String[] {play1.thename,play2.thename,play3.thename};

/*int min = mas[0];
int temp = 0;
int h = 0;
while (h<mas.length){
  for(int i = 0; i < mas.length; i++){
            if(min > mas[i]){
                min = mas[i];
                temp=i;
            }
        }
h++;
    System.out.print(mas2[temp]+" - ");  
    System.out.print(min+" ");
}*/
        //Arrays.sort(mas);
        //for (int i = 0; i < mas.length; i++) {
       // System.out.print(mas[i]+" ");
       // }


    }
}
class thePlay{
    int attempts;
    String thename;
    public void play(){
        Player play= new Player();
        play.Name();
        Random random = new Random();
        int randomNum = random.nextInt(3);
        System.out.println("Компьютер загадал число от 0 до 3.");
        int i = 1;
        play.Number();
        while (play.numP!=randomNum){
             if(play.numP>randomNum) {
                System.out.println("Загаданное число меньше,попробуй ещё.");
                play.Number();
                i++;
            }
            else {
                System.out.println("Загаданное число больше,попробуй ещё.");
                play.Number();
                i++;
            }
        }
        System.out.println("Ты угадал");
        attempts = i;
        thename = play.name;
    }   


    }

class Player{
    String name;
    int numP;
    public void Name(){
        System.out.println("Привет! Введи своё имя: ");
        Scanner scanner = new Scanner(System.in);
        name = scanner.nextLine();
    }
    public void Number(){
        System.out.print("Ты считаешь, что это число - ");
        Scanner scanner = new Scanner(System.in);
        numP = scanner.nextInt();
    }
}
Answer 1

Я немного поправил ваши переменные и произвел сортировку.

public class GuessTheNumber {
    public static void main(String[] args) {
        List<Player> players = new ArrayList<>();
        ThePlay play;
        for (int i = 0; i < 3; i++) {
            play = new ThePlay();
            players.add(play.play());
            toConsole(players.get(i));
        }
        players.sort(Comparator.comparing(Player::getAttempts));
        players.forEach(GuessTheNumber::toConsole);
    }
    private static void toConsole(Player player) {
        System.out.println(player.toString());
    }
}
class ThePlay {
    private int attempts;
    private String playerName;
    private Player player;
    private int randomNum;
    public ThePlay() {
        attempts = 1;
        player = new Player();
        randomNum = new Random().nextInt(100);
        System.out.println(randomNum);
    }
    public Player play() {
        player.makeName();
        System.out.println("Компьютер загадал число от 0 до 3.");
        player.makeNumber();
        while (player.getNumber() != randomNum) {
            if (player.getNumber() > randomNum) {
                System.out.println("Загаданное число меньше,попробуй ещё.");
            } else {
                System.out.println("Загаданное число больше,попробуй ещё.");
            }
            player.makeNumber();
            attempts++;
        }
        System.out.println("Ты угадал");
        player.setAttempts(attempts);
        return player;
    }
    public int getAttempts() {
        return attempts;
    }
    public void setAttempts(int attempts) {
        this.attempts = attempts;
    }
    public String getPlayerName() {
        return playerName;
    }
    public void setPlayerName(String playerName) {
        this.playerName = playerName;
    }
    public Player getPlayer() {
        return player;
    }
    public void setPlayer(Player player) {
        this.player = player;
    }
}
class Player {
    private String name;
    private int number;
    private int attempts;
    public void makeName() {
        System.out.println("Привет! Введи своё имя: ");
        Scanner scanner = new Scanner(System.in);
        name = scanner.nextLine();
    }
    public void makeNumber() {
        System.out.print("Ты считаешь, что это число - ");
        Scanner scanner = new Scanner(System.in);
        number = scanner.nextInt();
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public int getAttempts() {
        return attempts;
    }
    public void setAttempts(int attempts) {
        this.attempts = attempts;
    }
    @Override
    public String toString() {
        return "Игроку по именем " + getName() + " понадобилось " + getAttempts() + " попыток.";
    }
}
READ ALSO
Как в HashMap увеличить значение числа

Как в HashMap увеличить значение числа

Как HashMap<String, Integer> map увеличить значение числа, например, я вставил в map значение: mapput("example", 5); и как его по ключу увеличить?

137
Смена fragment в CountDownTimer

Смена fragment в CountDownTimer

уважаемые программисты и кодеры, возникла следующая проблема, которую я уже безуспешно пытаюсь исправить без малого деньУ меня есть метод...

103
Почему нестатические поля и блоки инициализируются раньше конструктора класса?

Почему нестатические поля и блоки инициализируются раньше конструктора класса?

Ведь конструктор и занимается инициализированием нестатических полей классаНо везде пишут, что нестатические поля и блоки инициализируются...

87
Программное изменение стиля

Программное изменение стиля

У меня есть такой стиль

187