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

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

ただいまの
回答率

90.54%

  • Java

    15564questions

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

  • for

    285questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

  • if

    243questions

    if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Javaで、for文の中にif文がある場合の正確な制御の仕方についてお聞きしたいです。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 5,050

ryoogo

score 1

前提・実現したいこと

プログラミング初心者です。
Javaでプログラムを組んでいます。
以下のように、for文の中にif文がある条件分岐なのですが、無限回試行されてしまいます。基礎的な質問で申し訳ありませんが、ご回答をお願いしたいです。

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

120回の試行を行いたいが無限回の試行になってしまう。
120回の試行それぞれのデータを取り出したいです。

該当のソースコード

     for ( int i = 2; i<10; i++){
         for ( int j = 1; j<i; j++){
             for ( int k = 0; k<j; k++){
        if ( 条件文1 ){
                    実行文1     
        }
        else if ( 条件文2 ){
                    実行文2
            }
             else if ( 条件文3 ){
                    実行文3
             }
             else if ( 条件文4 ){
                    実行文4
             }
           else if ( 条件文5 ){
                    実行文5
             }
           else{
                    実行文6
           }            
    }}}

試したこと

for文のみで試行したところ、120回で終わったので、if文の抜け方に問題があると思いますが、よくわかりません。。。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

たとえば、以下のように実行しても無限回は試行されません
具体的にどのようなコードを書いて無限回実行されたのでしょうか

class OAL{

public static void main(String[] args){

 for ( int i = 2; i<10; i++){
         for ( int j = 1; j<i; j++){
             for ( int k = 0; k<j; k++){
        if (k==2){
                  System.out.println("k2");

        }
        else if (k==0  ){
                  System.out.println("k0");
            }
             else if ( i==3 ){
                  System.out.println("i3");

             }
             else if (j==1 ){
                  System.out.println("j1");

             }
           else if (j==2  ){
                  System.out.println("j2");

             }
           else{
                  System.out.println("0");

           }            
    }}}
}

}


書き加えられたコメント内のコードに足りない分を追加して実行すると以下のようなコードで何十行か有限回実行された結果が出力されました

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


ddd();

}


public static int ddd(){

int price=100;
int quantity=10;
int sell0=30;
int sell1=40;
int sell2=50;
int a3=60;
int summax=46;
int gene1=99;
int gene2=99;
int sumgene=33;
int gene0=94;
int PO0 =104;
int POsell0=309;
int PObuy0=44;
int POuse0=70;
int dem0=90; 
int min0=66;
int payoff=61;
int  a0=62; 
int max0=22;
for ( int i = 2; i<10; i++){
for ( int j = 1; j<i; j++){
for ( int k = 0; k<j; k++){
System.out.println("iは" + i +"jは" + j + "kは" + k );

("希望販売価格1"+i*10).equals("希望販売価格"+i*10);

("希望販売価格"+i*10).equals("希望販売価格"+i*10);
//myAction.getActionName().equals("希望販売価格"+i*10);
//otherAction1.getActionName().equals("希望販売価格"+ j*10);
//otherAction2.getActionName().equals("希望販売価格"+ k*10);

if ( k*10/a3 + summax <= gene2 ){
price = k*10;
quantity = price/a3 + summax;
sell0 = 0;
sell1 = 0;
sell2 = quantity;
}
else if ( k*10 < a3 * (gene2-summax) && a3 * (gene2-summax) <j*10 ){
price = a3 * (gene2-summax);
quantity = gene2;
sell0 = 0;
sell1 = 0;
sell2 = quantity;
}
else if ( j*10/a3 + summax <= gene2 + gene1 ){
price = j*10;
quantity = price/a3 + summax;
sell0 = 0;
sell1 = quantity - gene2;
sell2 = gene2;
}
else if ( j*10 < a3 * (gene2 + gene1 - summax) && a3 * (gene2 + gene1 - summax) <i*10 ){
price = a3 * (gene2 + gene1 - summax);
quantity = gene2 + gene1;
sell0 = 0;
sell1 = gene1;
sell2 = gene2;
}
else if ( i*10/a3 + summax <= sumgene ){
price = i*10;
quantity = price/a3 + summax;
sell0 = quantity - gene1 - gene2;
sell1 = gene1;
sell2 = gene2;
}
else{
price = a3 * (sumgene - summax);
quantity = sumgene;
sell0 = gene0;
sell1 = gene1;
sell2 = gene2;
}
dem0 = price/a0 + max0;
POsell0 = price * sell0;
PObuy0 = - price * dem0;
POuse0 = 100 * min0 + (100 + price) * (dem0 - min0);
PO0 = POsell0 +PObuy0 + POuse0;
payoff = PO0;
System.out.println(payoff);
}}}
return payoff;

}

}

if,elseif文両方共に問題があるとは思えません
問題がある可能性が残るとすればgetActionName()ですが、このコードに関する部分で無限ループが起きているとすれば、getActionName()のメソッドの中で無限回ループが起きているのではないでしょうか 後はこの入れ子for文の入ったメソッド(今回は仮にddd()としたもの)の呼び出し部自体に無限ループが起きているかもしれない、です。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/13 22:58

    迅速な回答ありがとうございます。非常に助かります。
    具体的には、以下のようなコードです。
    summax,gene1,gene2,gene3など、新たに出てきているものは、このfor文の上で与えている定数となっています。
    分かりにくく、申し訳ないのですが、お願いいたします。
    ```java
    for ( int i = 2; i<10; i++){
    for ( int j = 1; j<i; j++){
    for ( int k = 0; k<j; k++){
    System.out.println("iは" + i +"jは" + j + "kは" + k );
    myAction.getActionName().equals("希望販売価格"+i*10);
    otherAction1.getActionName().equals("希望販売価格"+ j*10);
    otherAction2.getActionName().equals("希望販売価格"+ k*10);

    if ( k*10/a3 + summax <= gene2 ){
    price = k*10;
    quantity = price/a3 + summax;
    sell0 = 0;
    sell1 = 0;
    sell2 = quantity;
    }
    else if ( k*10 < a3 * (gene2-summax) && a3 * (gene2-summax) <j*10 ){
    price = a3 * (gene2-summax);
    quantity = gene2;
    sell0 = 0;
    sell1 = 0;
    sell2 = quantity;
    }
    else if ( j*10/a3 + summax <= gene2 + gene1 ){
    price = j*10;
    quantity = price/a3 + summax;
    sell0 = 0;
    sell1 = quantity - gene2;
    sell2 = gene2;
    }
    else if ( j*10 < a3 * (gene2 + gene1 - summax) && a3 * (gene2 + gene1 - summax) <i*10 ){
    price = a3 * (gene2 + gene1 - summax);
    quantity = gene2 + gene1;
    sell0 = 0;
    sell1 = gene1;
    sell2 = gene2;
    }
    else if ( i*10/a3 + summax <= sumgene ){
    price = i*10;
    quantity = price/a3 + summax;
    sell0 = quantity - gene1 - gene2;
    sell1 = gene1;
    sell2 = gene2;
    }
    else{
    price = a3 * (sumgene - summax);
    quantity = sumgene;
    sell0 = gene0;
    sell1 = gene1;
    sell2 = gene2;
    }
    dem0 = price/a0 + max0;
    POsell0 = price * sell0;
    PObuy0 = - price * dem0;
    POuse0 = 100 * min0 + (100 + price) * (dem0 - min0);
    PO0 = POsell0 +PObuy0 + POuse0;
    payoff = PO0;
    System.out.println(payoff);
    }}}
    return payoff;

    }
    ```

    キャンセル

  • 2017/01/13 23:13

    それを質問内で書くべきです。ここだとマークダウン効かないので。

    キャンセル

  • 2017/01/13 23:13

    長くなるので上記回答に追記して答えます

    キャンセル

  • 2017/01/13 23:23

    なるほど、理解しました。ご指摘の部分を変更して試してみます。
    迅速な回答ありがとうございます。非常に助かりました!

    キャンセル

0

i,j,kをfor文内で書き換えていないですか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/13 23:24

    ご回答ありがとうございます。書き換えてはいませんでしたが、他のファイルからgetで引っ張ってきている部分がダメだったみたいです。

    キャンセル

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

  • Java

    15564questions

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

  • for

    285questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

  • if

    243questions

    if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。