2016-10-28 19 views
-4

配列内に20個のランダムなダイストゥースを生成するプログラムと、ダイ値を出力する を生成するプログラムを作成し、最長のランのみをマークします。 1 2 5 5 3 1 2 4 3 2 2)3 6 5 5 6 3 1 最大長のランが複数ある場合は、最初にマークを付けます。Java Forループ!

私はこの質問に取り組んでおり、このコードはmaxCountをカウントするまで動作します。 しかし、私は最後の結果をプリントアウトすることに固執しています。これは、最後のforループで質問に必要なものをプリントアウトすることを意味しています。 しかし、結果は私が得たいものではありません。どうすればそれを理解できますか?

import java.util.Random; 

public class AA { 

public static void main(String[] args) { 
    int count = 1; 
    int maxCount = 1; 
    int runEndsAt = 0; 

    // create array 
    int[] num = new int[20]; 
    // create random object 
    Random numbers = new Random(); 
    for (int i = 0; i < 20; i++) { 
     num[i] = numbers.nextInt(6) + 1; 
     // added 1 b/c it starts from 0 
    } 

    boolean inRun = false; 
    for (int i = 0; i < num.length; i++) { 
     if (inRun) { 
      if (num[i] != num[i - 1]) { 
       /* 
       * System.out.print("|" + count +"|"); 
       * System.out.print(") "); 
       */ inRun = false; 

      } 
      if (inRun) { 
       System.out.print("|" + count + "|"); 
       count++; 
      } 
     } 
     if (!inRun) { 
      if (count > maxCount) { 
       maxCount = count; 
       runEndsAt = i; 
      } 
      count = 1; 
      if (i < 19) 
       // comparing index from i to i+1 
       if (num[i] == num[i + 1]) { 
       System.out.print("("); 
       inRun = true; 
       } 
     } 
    } 
    if (inRun) { 
     /* 
     * System.out.print("|" + count +"|"); System.out.print(")"); 
     */ } 

    for (int i = 0; i < num.length; i++) { 
     if (i == runEndsAt - maxCount) { 

      System.out.println("("); 

      if (i == runEndsAt) { 
       System.out.println(")"); 

      } 
     } 
    } 
} 
} 
+6

それは(頻繁に人がいない)あなたは、コードブロックを持って素晴らしいことだが、コード自体のフォーマットを見て、それが読めるかどう自問してみてください。 (ヒント:いいえ、遠隔ではありません。)投稿をはっきりさせ、時間を割いていることを実証することで、良い答えを得る機会が増えます。 –

+2

また、 "ランダム"を使用しない例を作成しても、デバッグしようとしているエラーが残っています。次に、エラーに関連していないすべてのコード行を削除します。あなたは、20行のコード(またはそのまわり)までそれを得ることができるはずです。その時点で、何がうまくいかないかを見ることさえできます。 – Teepeemm

+0

私はコードを読むことを修正しようとしました。 –

答えて

-1

サウンドは楽しい問題のようです。ここに私のソリューションです: - あなたはStringBuilderのを使用したい場合があり

import java.util.Random; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import java.util.stream.Collectors; 
import java.util.stream.Stream; 

public class SO_40307704 { 
    private final static int NUM_ROLLS = 100; 
    private final static Pattern PATTERN = Pattern.compile("(\\d)(\\1)+"); 

    public static void main(String... args) { 
    final Random r = new Random(); 
    final String rolls = Stream.generate(() -> r.nextInt(6) + 1) 
     .limit(NUM_ROLLS) 
     .map(i -> Integer.toString(i)) 
     .collect(Collectors.joining()); 
    Matcher m = PATTERN.matcher(rolls); 
    int start = 1; 
    int end = 0; 
    while (m.find()) { 
     if (m.end() - m.start() > end - start) { 
     end = m.end(); 
     start = m.start(); 
     } 
    } 
    System.out.println(String.format(
     "%s(%s)%s", 
     rolls.substring(0, start), 
     rolls.substring(start, end), 
     rolls.substring(end))); 
    } 
} 

は、それはあなたがJavaである場合

+0

私はそれが動作すると確信していますが、Regexを使って数字を数える理由は何ですか? –

+0

データを文字列としてエンコードすることができ、パース(パースされていない)を探している場合、正規表現が雄弁なコードになることがあります。この場合、条件は満たされ、コードは読みやすくなりました。 – Andreas

0

に役立ちます願っています。 ソリューション:

import java.util.stream.IntStream; 

public class LongestRun { 
    public static void main(String[] args) { 

     // We are told that die tosses is an Array... so we create one. 
     int[] tosses = IntStream.range(0, 20) 
         .map(i -> { return (int) (Math.random() * 6 + 1); }) 
         .peek(System.out::print) 
         .toArray(); 

     // Counting and generation of output: 
     int length = 0, longest = 0, startPos = 0; 
     StringBuilder sb = new StringBuilder(""+tosses[0]); 
     for (int i=1; i<tosses.length; i++) { 
      if (tosses[i-1] == tosses[i]) { 
       length++; 
      } else { 
       length=0; 
      } 

      if (longest < length) { 
       longest = length; 
       startPos = i-length; 
      } 
      sb.append("" + tosses[i]); 
     } 
     sb.insert(startPos+longest+1, ")"); 
     sb.insert(startPos, "("); 

     // Final result: 
     System.out.println("Result:"); 
     System.out.println(sb.toString()); 
    } 
} 
関連する問題