2016-11-08 65 views
1

我在編程方面的經驗很少,現在我正在大學讀編程課程。我們在課堂上遇到了一個問題,需要編寫一個程序,該程序可以生成從1到6的隨機數序列,並將括號放在一系列連續數字的周圍。例如,如果順序是12553124322223655631,程序將打印12(55)31243(2222)36(55)631。編寫一個程序,生成20個擲骰子的隨機序列

這裏是我到目前爲止的代碼:

package inRun; 
import java.util.Random; 

public class Prob612 { 
    public static void main(String args []){ 
    Random rand = new Random(); 
    boolean inRun = false; 
    int i = 0; 

int [] values; 
values = new int[20]; 


    while (i < values.length){ 
     int j = rand.nextInt(7); 
     if (j > 0 && j <= 6){ 
      values[i] = j; 
      i++; 
     } 
    } 

    for (i = 0; i < values.length; i++){ 
     if (inRun){ 
      if (values[i] != values[i + 1]){ 
       System.out.print(")"); 
       inRun = false; 
      } 
     } 
     if (inRun = false){ 
      if (values[i] == values[i - 1]){ 
       System.out.print("("); 
       inRun = true; 
      } 
     } 
     System.out.print(values[i]); 
    } 

    if (inRun){System.out.print(")");} 
} 

} 

當我運行這個程序,它打印的順序,但沒有括號。我想我需要使用增強的for循環,但我不知道如何使用這樣的程序去做這件事。任何洞察力將不勝感激。謝謝。

+1

'if(inRun = false)'沒有做你想做的事。仔細看...... –

+1

我不會使用增強for循環,因爲您可能需要知道這個指數。保持2個索引值:表示一段連續值的開始和結束。每當你得到下一個值時,檢查它是否與以前一樣。如果是,則提前「結束」索引。如果不是,則在開始和結束索引處添加括號,然後將索引重置爲當前索引。 – Carcigenicate

+1

「將一系列連續數字放在括號內」,我不明白你給出的期望輸出是什麼意思。你的意思是重複數字嗎? – px06

回答

2

你幾乎解決了它。有兩件事要注意:

  • 您在if語句中將boolean賦值爲false。 (inRun = false)應該是(inRun == false)
  • 在最後一個項目上,您正在使用值[i + 1]溢出數組。

這應該做到這一點。

boolean inside = false; 

    for (int i = 0; i < values.length; i++) { 
     if (inside) { 
     if (values[i] != values[i - 1]) { 
      System.out.print(')'); 
      inside = false; 
     } 

     } else { 
     if (i < values.length - 1) { 
      if (values[i + 1] == values[i]) { 
       System.out.print('('); 
       inside = true; 
      } 
     } 
     } 
     System.out.print(values[i]); 
    } 
+1

裏面的布爾語句是沒有必要的 –

+1

@Bijay Gurung謝謝你這完美的工作。我只想澄清最後的聲明。你之前說過該程序超出了陣列,那麼你爲什麼要打印最後一個數字呢? – derek00101110

+2

如果您在末尾有一對匹配項,則會失敗...輸出:2(66)414(3333)1523615(664) –

0

我給你另一個解決方案,而不使用布爾值,但使用兩個循環找到匹配的連續數字。評論應該解釋代碼:

for (int i = 0; i < values.length; i++) 
    { 
     // store the number of consecutive numbers 
     int count = 0; 

     /* check if it's not the last element (avoid outOfBound Exception when you reach the last element) 
      and if there is a match */ 

     if(i+1 < values.length && values[i] == values[i+1]) 
     { 
      count++; 

      //print parenthesis and the first matching number 
      System.out.print("("+values[i]); 

      // use a second for to match all the possible consecutive equal numbers 
      for(int j = i+1; j < values.length; j++) 
      { 
       // same as before, check if it's not the last element and if there is a match 
       if(j+1 < values.length && values[j] == values[j+1]) 
       { 
        count++; 
        System.out.print(values[j]); 
       } 
       else 
       { 
        // if you have a different value in the next array cell, then print value and close the match 
        System.out.print(values[j]+")"); 
        /* assing to i the value of i + the number of matching consecutive numbers 
        to resume the first for from the next value after the series of consecutive numbers */ 
        i = i + count; 
        // exit to avoid unnecessary loops 
        break; 
       } 
      } 
     } 
     // print if you have a single number 
     else 
      System.out.print(values[i]); 
    }