Я французский новичок в разработке Java и Android. На самом деле я пытаюсь сделать упражнение, но я застрял...
У меня есть ArrayList (playersList2) Object (Players), Players содержит строку (mFirstName) и int (mScore))
Я попробовал использовать сборку, цикл, и я прочитал много документации и форума, но я не нашел решения, однако я уверен, что это легко
Players players = new Players(mFirstname, mScore);
mPreferences = getSharedPreferences(PREF_PLAYERS_LIST, MODE_PRIVATE);
String fromJsonPlayersList = mPreferences.getString(PREF_PLAYERS_LIST, null);
Gson gson = new Gson();
ArrayList<Players> playersList2 = gson.fromJson(fromJsonPlayersList, new TypeToken<ArrayList<Players>>()
{
}.getType());
/* find the weakiest players/
if //mscore is bigger than weakest players
{//remove the weakest players and add this one
}*/
Я хочу найти минимальный mScore во всем ArrayList, чтобы создать условие (если текущий mScore> минимальный список игроков2 заменить самых слабых игроков PlayersList2 текущими игроками)
Большое спасибо
Самое простое решение для вас — использовать простой цикл for, например:
Players minScorePlayer = playersList2.get(0);
for (Players player: playersList2) {
if (player.getScore() < minScorePlayer.getScore()) {
minScorePlayer = player;
}
}
//now minScorePlayer variable contains the reference to a player with the minimal score
P.S. этот код предназначен для того, чтобы дать вам общее представление. Возможно, вам придется настроить его для ваших нужд.
спасибо за ваши ответы, на самом деле это работает!
Предполагая, что это ваш класс Players:
public class Players {
String mFirstName;
int mScore;
public Players(String mFirstName, int mScore){
this.mFirstName = mFirstName;
this.mScore = mScore;
}
}
это даст вам самый низкий балл:
public static void main(String[] args) {
ArrayList<Players> playersList2 = new ArrayList<>();
for (int i = 0; i < 10; i++){
Players player = new Players("name", i);
}
Players lowestScore = playersList2.get(0);
for (Players p: playersList2) {
if (p.mScore < lowestScore.mScore){
lowestScore = p;
}
}
System.out.println(lowestScore.mScore);
}
Есть несколько способов сделать это.
Прежде чем мы начнем с решения, давайте у нас есть класс Player:
class Player {
String firstName;
int score;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
Один из способов — пройтись по ArrayList и найти игрока с минимальным счетом, а другой — использовать Stream API для поиска игрока с минимальным счетом.
Решение 1. Здесь мы перебираем список, чтобы найти игрока с минимальным счетом.
List<Player> players = new ArrayList<>();
// .. add some players in the List players
Player weakestPlayer = null;
int minScore = Integer.MAX_VALUE;
for(Player player : players) {
if (player.getScore() < minScore) {
weakestPlayer = player;
}
}
Решение2: Это немного сложное решение с использованием Stream API в java.
Player weakestPlayer = players
.stream()
.min(Comparator.comparing(Player::getScore))
.orElseThrow(NoSuchElementException::new);
Это решение использует Java Stream API для поиска игрока с минимальным счетом. Здесь мы используем метод min(), чтобы найти игрока с минимальным счетом. Методу min() нужен компаратор, который поможет сравнить результаты и определить, у какого игрока минимальный счет. Приведенная ниже строка кода выбирает компаратор для int.
Comparator.comparing(Player::getScore)
Если список пуст, он выдаст ошибку, поскольку не может найти игрока с минимальным счетом.
На самом деле вам нужно перебирать список массивов, используя такой объект, как итератор. Есть несколько способов перебора массива - с использованием циклов (for, while) и с использованием объекта-итератора.