ลำดับตัวเลขสุ่มที่หยุดด้วยตัวเลขที่เท่ากัน 2 ตัว

สร้างลำดับตัวเลขที่ประกอบด้วยตัวเลขตั้งแต่ 0-9 และหากตัวเลขสองตัวเรียงกันด้านหลัง ให้จบลำดับและแสดงความยาวของลำดับ

ฉันพยายามหาวิธีเขียนโปรแกรมตามข้อกำหนดข้างต้น ฉันไม่สามารถคิดวิธีการทำเช่นนี้ได้ มากที่สุดที่ฉันได้รับคือ:

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");

..

และฉันก็ไม่รู้ว่าจะจบลำดับอย่างไรเมื่อตัวเลขที่เท่ากันสองตัวปรากฏเรียงกัน

นี่คือตัวอย่างที่ได้รับ:

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

ลำดับนี้มีความยาว 11 หมายเลข "

ขอบคุณและความช่วยเหลือได้รับการชื่นชมมาก!


person QuakeKO    schedule 12.12.2012    source แหล่งที่มา
comment
หันหลังชนกัน คุณหมายถึง if (current_number == previous_number) { ใช่ไหม?   -  person Robert Harvey    schedule 12.12.2012


คำตอบ (3)


ฉันไม่เห็นที่ใดที่ num2 มีการเปลี่ยนแปลง คุณต้องการให้ num2 เก็บหมายเลขที่คุณสร้างขึ้นในการวนซ้ำครั้งก่อนหน้า ดังนั้น ก่อนสิ้นสุดลูป คุณต้องตั้งค่า num2 = num3;

จริงๆ ก็ไม่จำเป็นต้องมี num3 เลย คุณได้รับการตั้งค่าก่อนการวนซ้ำเพื่อใช้ num1 และ num2 เป็นหมายเลขก่อนหน้าและปัจจุบัน ตามลำดับ จากนั้นจึงเพิ่ม num3 ลงในมิกซ์ การเปลี่ยนชื่อ 'num1' และ 'num2' (พูดว่า 'ก่อนหน้า' และ 'ปัจจุบัน') อาจช่วยชี้แจงว่าเกิดอะไรขึ้น

เพิ่งสังเกต มีอีกประเด็นเล็กๆ น้อยๆ อีก หากเทอมแรกและเทอมที่สองเท่ากัน คุณจะไม่ผ่านลูปเลย และพลาดผลลัพธ์ไป คุณควรส่งออกหลังจากการวนซ้ำของคุณออกแทน (หลังจากนั้นเงื่อนไข while กำลังตรวจสอบความเท่าเทียมกันอยู่แล้ว)

========

บางสิ่งเช่นนี้:

 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
ฉันไม่สามารถคิดถึงสิ่งอื่นที่จะใส่หลังจากนั้นได้ - 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");
  }
}

ขอบคุณมากครับคุณ femtoRgon ฉันได้รับคำแนะนำของคุณแล้วแก้ไขโปรแกรมอีกครั้งและทำงานได้อย่างสมบูรณ์ มันง่ายกว่าที่ฉันคิดไว้ (ฉันคิดมากไป)

ขอขอบคุณอีกครั้ง!

person QuakeKO    schedule 12.12.2012

นี่จะค่อนข้างง่ายด้วย 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