質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Java

    14089questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

java,ルーレットでの隣合う数字の最大値を求めるプログラム

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 801

KakegawaKouiti

score 16

前提・実現したいこと

ルーレットにおいて、
連続するN個の和の最大値を求める。
Nが2~35の時のそれぞれの最大値をプログラムで計算して答えたい。
注意、配列の最後と最初は円形なので繋がっている事としています。

発生している問題・エラーメッセージ

計算が想定通りになりません。
正解としては、
51、77、90、・・・・
となるはずなのですが、
51、124、209、・・・
となってしまします。
分からない状況です。
もし、分かる方いらっしゃれば、お教えください。
また、足りない情報がありましたら、補足致します。

該当のソースコード

public class nyuumon6__10 {

    public static void main(String[] args) {

        int[] EuroStyle = {0, 32, 15, 19, 4, 21, 2, 25, 17, 34, 6,27,13,36,11,30,8,
                23,10,5,24,16,33,1,20,14,31,9,22,18,29,7,28,12,35,3,26};

        int[] sum = new int[36];
        int[] Max_2 = new int[36];
        //繰り返し回数のループ
        for(int i=2;i<36;i++){
            for(int j=0;j<36;j++){

                //実際の繰り返し処理
                for(int k=0;k<i;k++){
                    if(j+k<36){
                    sum[j]+=EuroStyle[j+k];
                    }else{
                        //if(j+k!=72){
                            sum[j]+=EuroStyle[j+k-36];
                        //}else{
                        //    sum[j]+=EuroStyle[0];
                        //}
                    }

                }
                //判定
                if(Max_2[i]<sum[j]){
                        Max_2[i] =sum[j];
                }
                //System.out.println(Max_2[i]);
               }
            System.out.println(Max_2[i]);    
            }    

    }

}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

ルーレットの目の数が37あるのに、ひとめぐり36になっているのはおかしいのでは?

加えて、1周したあとsumがリセットされていないため、2周目は1周目の結果にさらに加算されることになります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/18 12:46

    大変にありがとうございます。解決致しました。
    リセット、今後忘れないようにします。

    キャンセル

0

ループが複数存在する場合は、一気に作成するのではなく、順番に作っていって、メソッドなどで分割するとわかりやすくなります。

分割するポイントとしては以下のとおりで、これをそれぞれメソッド作るとわかりやすいでしょう。

  1. 配列 EuroStyleの配列から、連続して数値を取り出して合計する
  2. 合計したものの中から最大値を求める
  3. 連続で取り出す個数は2~35まで変わる

これを順次組み立てていきましょう。

1. 配列 EuroStyleの配列から、連続して数値を取り出して合計する

これは取り出す個数に応じて合計することになりますので、メソッドの引数として受け取るようにしましょう。

/**
 * @param count 連続で取り出す個数
 * @param position 開始位置
 */
public int sum(int count,int position) {
  int total = 0;
  // ここで合計をする処理を書く
  return total;
}

重要なポイントは「配列の最後に達したら、次は先頭の値を取り出す」ことですね。
そういう時には余り算を使います。
具体的にはEuroStyleから取り出す位置が超えてしまう=取り出す位置÷EuroStyleの長さで出る余りの値とすると良いでしょう。

public int sum(int count,int position) {
  int total = 0;
  int length = EuroStyle.length; // 配列の長さ
  for (int s = 0; s < count; s++) {
    int target = (position + s) % length;  // 取り出す位置を決める
    total += EuroStyle[target];
  }
  return total;
}

2. 合計したものの中から最大値を求める

Math.max( a,b ) で大きい方の値を取得できますので、ループの中で保持しておくを常にいれておけばよいでしょう。先ほどの「取り出す位置」はここで指定します。EuroStyleの最初から最後までを起点として合計を出すので、つまりEuroStyleの最初(0番目)から最後(EuroStyleの長さ未満まで)を繰り返します。

public int max(int count) {
    int length = EuroStyle.length; // 配列の長さ
    int max = 0;  // 最大値を格納する変数

    for (int i = 0; i < length; i++) {
      int sum = sum(count, i);
      max = Math.max(max, sum); // 現在の最大値と、計算した合計値の大きい方を採用
    }

    return max;
  }

3. 連続で取り出す個数は2~35まで変わる

あとは2.で作成したmax(count)のcountが2~35まで渡せばそれぞれ値を出せるでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    メソッドの切り離しについて (Java学習中)

    こんばんは。 今日は、メソッドについての質問です。 とても簡単なプログラミングで、数値を入力してもらってそれを左から順番に小さい方から並べるというものを作ろうとしました。 こ

  • 受付中

    ループ化の方法

    public class Gohkaku {     public static void main(String[] args){         int math = ne

  • 解決済

    乱数表示から最大値を表示する Java

    いつもお世話になっております。 現在変数を表示させてから、最大値を求めるプログラムを組んでいます。 乱数は表示できる状態です。 開発環境Eclipse、言語はJavaです

  • 解決済

    100になる直前の加算結果出力

    javaで開始値と終了値を入力してその間の偶数を加算していき、合計が100を超えたら「数値が100を超えたため、処理を中止します。」とメッセージを出し、かつ合計が100になる前の加

  • 解決済

    変数が初期化されていないというエラーが出て困っています

    整数データが1行に1つ計500個書かれているテキストファイルdata_5_1000_500.txtのデータの最大値、最小値、平均値を求めるプログラムCalcFile.javaを書き

  • 解決済

    for文を使用したバブルソート

    前提・実現したいこと 以下の条件を持つプログラムを作成しようとしています。 1.『end』が入力されるまで入力値を受け付ける 2.『end』が入力された後、入力値をバブル

  • 解決済

    Loopにならない

    前提・実現したいこと 一年間の保険の合計金額を表示する問題です。15歳以下は保険に加入することができない、16から19歳は15%増、20から24は5%増、25歳以上は10%引きと

  • 解決済

    java 配列を別クラスで受け取る方法

    キーボードから入力したテストの結果から、合計・平均・順位(バブルソート)分散・標準偏差を導出するプログラムを作っています。 具体的には 生徒数を入力 ↓ 生徒数の応じた点数を入力

同じタグがついた質問を見る

  • Java

    14089questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。