Urutan angka acak yang berhenti pada 2 angka yang sama

Buatlah barisan angka yang terdiri dari angka 0-9, dan jika dua angka muncul saling membelakangi, akhiri barisan tersebut dan tampilkan panjang barisan tersebut.

Saya telah mencoba mencari cara untuk menulis program dengan persyaratan di atas. Saya tidak bisa memikirkan cara untuk melakukan ini. Yang paling banyak saya dapatkan adalah:

import java.util.Random;
public class RandomSequence{
  public static void main(String[]args){
    int num1, num2, num3, i=2;
    Random r=new Random();
    num1=r.nextInt(10);
    num2=r.nextInt(10);
    System.out.print(num1+", "+num2+", ");
    while (num1!=num2){
      num3=r.nextInt(10);
      i++;
      System.out.print(num3+", ");
      if (num3==num2){
        System.out.println("There are "+i+" numbers in the sequence");

..

dan saya tidak tahu bagaimana mengakhiri rangkaian tersebut ketika dua angka yang sama muncul secara berurutan.

Berikut ini contoh yang diberikan:

1,6,2,9,8,1,4,2,8,2,2

Urutan ini panjangnya 11 angka. "

Terima kasih, dan bantuan sangat kami hargai!


person QuakeKO    schedule 12.12.2012    source sumber
comment
Secara berurutan, maksud Anda if (current_number == previous_number) {?   -  person Robert Harvey    schedule 12.12.2012


Jawaban (3)


Saya tidak melihat di mana pun angka2 berubah. Anda ingin num2 menampung nomor yang Anda hasilkan pada iterasi loop sebelumnya. Jadi, tepat sebelum akhir perulangan, Anda perlu menyetel num2 = num3;

Sungguh, tidak ada kebutuhan untuk num3 sama sekali. Anda bersiap sebelum loop untuk menggunakan num1 dan num2 masing-masing sebagai angka sebelumnya dan saat ini, lalu menambahkan num3 ke dalam campuran. Mengganti nama 'num1' dan 'num2' (misalnya 'sebelumnya' dan 'saat ini') mungkin membantu memperjelas apa yang terjadi.

Baru saja diperhatikan, satu masalah kecil lagi. Jika suku pertama dan suku kedua sama, Anda tidak akan melewati perulangan sama sekali, sehingga hasilnya akan hilang. Anda harus mengeluarkan output setelah loop Anda keluar (bagaimanapun juga, kondisi while sudah memeriksa kesetaraan).

========

Sesuatu seperti ini:

 get first number, store as 'previous'.
 get second number, store as 'current'.
 print first couple numbers
 while (previous!=current){
   count up.
   move 'current' to 'previous'
   get next number, store as 'current'
   print current value
}
print final count
person femtoRgon    schedule 12.12.2012
comment
Yah, aku tidak bisa memikirkan hal lain untuk ditaruh setelahnya. - person QuakeKO; 12.12.2012

    import java.util.Random;
public class RandomSequence{
  public static void main(String[]args){
    int num1, num2, num3, i=2;
    Random r=new Random();
    num1=r.nextInt(10);
    num2=r.nextInt(10);
    System.out.print(num1+", "+num2);
    while (num1!=num2){
      num1=num2;
      num2=r.nextInt(10);
      i++;
      System.out.print(", "+num2);
    }
    System.out.println("\n\nThis sequence consists of "+i+" numbers");
  }
}

Terima kasih banyak femtoRgon. Saya mengambil tip Anda dan mengedit ulang programnya dan berfungsi dengan sempurna. Itu lebih mudah dari yang saya kira (saya terlalu memikirkannya).

Terima kasih lagi!

person QuakeKO    schedule 12.12.2012

Ini akan sangat mudah dengan ArrayList

import java.util.ArrayList;
import java.util.Random;
public class RandomSequenceB {
 public static void main(String[]args){
   int i=0;
   ArrayList sequence = new ArrayList();

   while (true) {
     sequence.add(new Random().nextInt(10));
     System.out.println(sequence);
     if (i > 1 && sequence.get(i) == sequence.get(i - 1)){
       System.out.println("There are "+i+" numbers in the sequence");
       break;
     }
     i++;
   } 
 }   

}

person user1452787    schedule 12.12.2012