Menu
CoddyTech

Penambahan Bersyarat: putIfAbsent

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 29 dari 65.

Terkadang kamu perlu menambahkan pasangan kunci-nilai ke Map, tetapi hanya jika kunci itu belum ada. Method putIfAbsent() menangani situasi ini dengan tepat dengan menambahkan entri hanya jika kunci tersebut belum ada di map.

Method ini menerima dua parameter: key yang akan diperiksa, dan nilai yang akan ditambahkan jika key tidak ada. Jika key sudah ada, putIfAbsent() tidak melakukan apa pun dan membiarkan nilai yang sudah ada tetap sama. Jika key tidak ada, method ini menambahkan pasangan key-value baru ke map.

Map<String, int> gameScores = {
  'Alice': 150,
  'Bob': 200
};

// Ini akan menambahkan Charlie karena dia belum ada di map
gameScores.putIfAbsent('Charlie', () => 0);
print(gameScores);  // {Alice: 150, Bob: 200, Charlie: 0}

// Ini tidak akan mengubah skor Alice karena dia sudah ada
gameScores.putIfAbsent('Alice', () => 0);
print(gameScores);  // {Alice: 150, Bob: 200, Charlie: 0}

method putIfAbsent() sangat berguna untuk menginisialisasi nilai default, seperti menyiapkan akun pengguna baru atau memastikan key tertentu tersedia sebelum melakukan operasi padanya. Ini cara yang aman untuk menambahkan data tanpa tanpa sengaja menimpa informasi yang sudah ada.

challenge icon

Tantangan

Mudah

Buat program yang mengelola sistem pendaftaran turnamen game dengan melacak skor pemain dan memastikan semua pemain memiliki nilai awal default. Programmu harus:

  1. Membaca input string yang mewakili nama turnamen
  2. Membaca beberapa pasang input yang mewakili nama pemain dan skor mereka saat ini (input akan berakhir saat kamu menerima "scores_done")
  3. Membaca beberapa input string yang mewakili pemain baru yang ingin bergabung dengan turnamen (input akan berakhir saat kamu menerima "players_done")
  4. Membuat Map untuk menyimpan nama pemain sebagai kunci dan skor mereka sebagai nilai
  5. Menggunakan method putIfAbsent() untuk menambahkan setiap pemain baru dengan skor default 0, tetapi hanya jika mereka belum terdaftar
  6. Menghitung statistik turnamen dan mencetak laporan pendaftaran dengan format persis seperti yang ditunjukkan di bawah

Misalnya, jika nama turnamennya adalah "Spring Championship", skor yang sudah ada mencakup "Alice" dengan skor 150, "Bob" dengan skor 200, "Charlie" dengan skor 75, dan pemain barunya adalah "Diana", "Alice", "Eve", programmu harus menghasilkan output:

Tournament: Spring Championship
Initial Scores: {Alice: 150, Bob: 200, Charlie: 75}
Registration Process:
Adding Diana: New player registered with score 0
Adding Alice: Player already exists, keeping score 150
Adding Eve: New player registered with score 0
Final Scores: {Alice: 150, Bob: 200, Charlie: 75, Diana: 0, Eve: 0}
Tournament Statistics:
Total registered players: 5
Players with scores above 0: 3
New players added: 2
Average score: 85.0
Status: Registration completed successfully

Jika nama turnamennya adalah "Winter Cup", skor yang sudah ada mencakup "John" dengan skor 300, "Mary" dengan skor 250, dan pemain barunya adalah "Sarah", "Tom", "John", programmu harus menghasilkan output:

Tournament: Winter Cup
Initial Scores: {John: 300, Mary: 250}
Registration Process:
Adding Sarah: New player registered with score 0
Adding Tom: New player registered with score 0
Adding John: Player already exists, keeping score 300
Final Scores: {John: 300, Mary: 250, Sarah: 0, Tom: 0}
Tournament Statistics:
Total registered players: 4
Players with scores above 0: 2
New players added: 2
Average score: 137.5
Status: Registration completed successfully

Jika nama turnamennya adalah "Summer League", skor yang sudah ada mencakup "Alex" dengan skor 180, "Jordan" dengan skor 220, "Taylor" dengan skor 160, "Morgan" dengan skor 190, dan pemain barunya adalah "Casey", "Riley", programmu harus menghasilkan output:

Tournament: Summer League
Initial Scores: {Alex: 180, Jordan: 220, Taylor: 160, Morgan: 190}
Registration Process:
Adding Casey: New player registered with score 0
Adding Riley: New player registered with score 0
Final Scores: {Alex: 180, Jordan: 220, Taylor: 160, Morgan: 190, Casey: 0, Riley: 0}
Tournament Statistics:
Total registered players: 6
Players with scores above 0: 4
New players added: 2
Average score: 158.33333333333334
Status: Registration completed successfully

Programmu harus menggunakan method putIfAbsent() untuk menambahkan pemain baru dengan skor default 0, serta memastikan pemain yang sudah terdaftar tetap memiliki skor saat ini. Hitung rata-rata skor dengan membagi total semua skor dengan jumlah pemain. Hitung jumlah pemain yang memiliki skor di atas 0 dan jumlah pemain baru yang benar-benar ditambahkan, tidak termasuk pemain yang sudah terdaftar. Format input adalah: nama turnamen, lalu nama pemain dan skor secara bergantian (sebagai string yang perlu dikonversi menjadi bilangan bulat), diakhiri dengan "scores_done", kemudian nama-nama pemain baru yang diakhiri dengan "players_done".

Coba sendiri

import 'dart:io';

void main() {
  // Baca nama turnamen
  String? tournamentName = stdin.readLineSync();
  
  // Buat map untuk menyimpan skor pemain
  Map<String, int> playerScores = {};
  
  // Baca skor pemain yang sudah ada
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "scores_done") break;
    
    String playerName = input!;
    String? scoreInput = stdin.readLineSync();
    int score = int.parse(scoreInput!);
    playerScores[playerName] = score;
  }
  
  // Simpan skor awal untuk ditampilkan
  Map<String, int> initialScores = Map.from(playerScores);
  
  // Baca pemain baru yang akan didaftarkan
  List<String> newPlayers = [];
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "players_done") break;
    newPlayers.add(input!);
  }
  
  // TODO: Tulis kodemu di bawah ini
  // Gunakan method putIfAbsent() untuk menambahkan pemain baru dengan skor awal 0
  // Lacak proses pendaftaran dan hitung statistik
  
  // Cetak laporan pendaftaran turnamen
  print("Tournament: $tournamentName");
  print("Initial Scores: $initialScores");
  print("Registration Process:");
  // Cetak detail proses pendaftaran di sini
  print("Final Scores: $playerScores");
  print("Tournament Statistics:");
  // Cetak statistik di sini
  print("Status: Registration completed successfully");
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online