Saya mendapat ArrayList yang terdiri dari 2 jenis nilai: menang & kalah. Saya mencoba menghitung berapa kali berturut-turut kemenangan terjadi di ArrayList. Saya belum bisa menyelesaikan tugas sejauh ini.

ArrayList <String> wins = new ArrayList<String>();
System.out.print(wins);
//[Won, Won, Won, Loss, Loss, Won, Won, Loss, Loss, Loss, Loss, Loss, Won, Won, Won, Won, Won, Loss]

String value = wins.get(0);

int maxValue=1;
int count = 1 ;

for (int i=1; i<wins.size(); i++){
     if(wins.get(i) == wins.get(i-1)){      
        count++;       
        if(count >= maxValue){
            maxValue = count;
            value = wins.get(i);
        }
    }
}

System.out.println(value + " : " + maxValue );
// Won : 1

Hasilnya jelas salah karena menang telah terjadi 4 kali berturut-turut di beberapa titik di ArrayList. Adakah yang bisa membantu saya dengan yang ini?

0
egx 2 Februari 2020, 16:47

2 jawaban

Jawaban Terbaik

Anda harus mencoba dengan menggunakan persamaan dan tidak merujuk persamaan ==:

if(wins.get(i) == wins.get(i-1)){  

Seharusnya:

if(wins.get(i).equals(wins.get(i-1))) {  

Mengapa ini bisa bekerja dengan String, mengingat bahwa konstanta diinternir, ini tidak selalu terjadi.

Last but not least, Anda harus mengatur ulang hitungan Anda saat ketidakcocokan kesetaraan!

Seperti dalam:

for (int i=1; i<wins.size(); i++){
  String current = wins.get(i);
  if (current.equals(wins.get(i-1))) {      
    count++;       
    if(count >= maxValue){
      maxValue = count;
      value = current;
    }
  } else {
    count = 0;
  }
}

Perhatikan bahwa Anda mungkin tidak membutuhkan value sama sekali.

1
NoDataFound 2 Februari 2020, 14:37

Jika Anda tidak ingin menulis ulang kode sebelumnya menjadi array boolean, dan untuk beberapa alasan yang tidak ditentukan harus terjebak dengan string, Anda dapat menggunakan konstruksi seperti itu:

for (int i=1; i<wins.size(); i++) {
    if(wins.get(i).equals(wins.get(i-1))) {      
        count++;       
        if(count >= maxValue) {
            maxValue = count;
            value = wins.get(i);
        }
    } else {
        count = 0;
    }
}

String memiliki metode perbandingannya sendiri. Anda mendapatkan jawaban "1" karena kode Anda menganggap semua string itu TIDAK sama.

Dan seperti yang dinyatakan oleh jawaban sebelumnya, Anda harus mengatur ulang penghitung setiap kali Anda menemukan elemen yang berbeda di baris Anda.

0
Paul Alex 2 Februari 2020, 14:29