###前提・実現したいこと
プログラミング初心者です。
Javaでプログラムを組んでいます。
以下のように、for文の中にif文がある条件分岐なのですが、無限回試行されてしまいます。基礎的な質問で申し訳ありませんが、ご回答をお願いしたいです。
###発生している問題・エラーメッセージ
120回の試行を行いたいが無限回の試行になってしまう。
120回の試行それぞれのデータを取り出したいです。
###該当のソースコード
java
1 for ( int i = 2; i<10; i++){ 2 for ( int j = 1; j<i; j++){ 3 for ( int k = 0; k<j; k++){ 4 if ( 条件文1 ){ 5 実行文1 6 } 7 else if ( 条件文2 ){ 8 実行文2 9 } 10 else if ( 条件文3 ){ 11 実行文3 12 } 13 else if ( 条件文4 ){ 14 実行文4 15 } 16 else if ( 条件文5 ){ 17 実行文5 18 } 19 else{ 20 実行文6 21 } 22 }}}
###試したこと
for文のみで試行したところ、120回で終わったので、if文の抜け方に問題があると思いますが、よくわかりません。。。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
i,j,kをfor文内で書き換えていないですか?
投稿2017/01/13 13:49
総合スコア18155
0
ベストアンサー
たとえば、以下のように実行しても無限回は試行されません
具体的にどのようなコードを書いて無限回実行されたのでしょうか
java
1class OAL{ 2 3public static void main(String[] args){ 4 5 for ( int i = 2; i<10; i++){ 6 for ( int j = 1; j<i; j++){ 7 for ( int k = 0; k<j; k++){ 8 if (k==2){ 9 System.out.println("k2"); 10 11 } 12 else if (k==0 ){ 13 System.out.println("k0"); 14 } 15 else if ( i==3 ){ 16 System.out.println("i3"); 17 18 } 19 else if (j==1 ){ 20 System.out.println("j1"); 21 22 } 23 else if (j==2 ){ 24 System.out.println("j2"); 25 26 } 27 else{ 28 System.out.println("0"); 29 30 } 31 }}} 32} 33 34}
書き加えられたコメント内のコードに足りない分を追加して実行すると以下のようなコードで何十行か有限回実行された結果が出力されました
java
1class RUD{ 2public static void main(String[] args){ 3 4 5ddd(); 6 7} 8 9 10public static int ddd(){ 11 12int price=100; 13int quantity=10; 14int sell0=30; 15int sell1=40; 16int sell2=50; 17int a3=60; 18int summax=46; 19int gene1=99; 20int gene2=99; 21int sumgene=33; 22int gene0=94; 23int PO0 =104; 24int POsell0=309; 25int PObuy0=44; 26int POuse0=70; 27int dem0=90; 28int min0=66; 29int payoff=61; 30int a0=62; 31int max0=22; 32for ( int i = 2; i<10; i++){ 33for ( int j = 1; j<i; j++){ 34for ( int k = 0; k<j; k++){ 35System.out.println("iは" + i +"jは" + j + "kは" + k ); 36 37("希望販売価格1"+i*10).equals("希望販売価格"+i*10); 38 39("希望販売価格"+i*10).equals("希望販売価格"+i*10); 40//myAction.getActionName().equals("希望販売価格"+i*10); 41//otherAction1.getActionName().equals("希望販売価格"+ j*10); 42//otherAction2.getActionName().equals("希望販売価格"+ k*10); 43 44if ( k*10/a3 + summax <= gene2 ){ 45price = k*10; 46quantity = price/a3 + summax; 47sell0 = 0; 48sell1 = 0; 49sell2 = quantity; 50} 51else if ( k*10 < a3 * (gene2-summax) && a3 * (gene2-summax) <j*10 ){ 52price = a3 * (gene2-summax); 53quantity = gene2; 54sell0 = 0; 55sell1 = 0; 56sell2 = quantity; 57} 58else if ( j*10/a3 + summax <= gene2 + gene1 ){ 59price = j*10; 60quantity = price/a3 + summax; 61sell0 = 0; 62sell1 = quantity - gene2; 63sell2 = gene2; 64} 65else if ( j*10 < a3 * (gene2 + gene1 - summax) && a3 * (gene2 + gene1 - summax) <i*10 ){ 66price = a3 * (gene2 + gene1 - summax); 67quantity = gene2 + gene1; 68sell0 = 0; 69sell1 = gene1; 70sell2 = gene2; 71} 72else if ( i*10/a3 + summax <= sumgene ){ 73price = i*10; 74quantity = price/a3 + summax; 75sell0 = quantity - gene1 - gene2; 76sell1 = gene1; 77sell2 = gene2; 78} 79else{ 80price = a3 * (sumgene - summax); 81quantity = sumgene; 82sell0 = gene0; 83sell1 = gene1; 84sell2 = gene2; 85} 86dem0 = price/a0 + max0; 87POsell0 = price * sell0; 88PObuy0 = - price * dem0; 89POuse0 = 100 * min0 + (100 + price) * (dem0 - min0); 90PO0 = POsell0 +PObuy0 + POuse0; 91payoff = PO0; 92System.out.println(payoff); 93}}} 94return payoff; 95 96} 97 98} 99
if,elseif文両方共に問題があるとは思えません
問題がある可能性が残るとすればgetActionName()ですが、このコードに関する部分で無限ループが起きているとすれば、getActionName()のメソッドの中で無限回ループが起きているのではないでしょうか 後はこの入れ子for文の入ったメソッド(今回は仮にddd()としたもの)の呼び出し部自体に無限ループが起きているかもしれない、です。
投稿2017/01/13 13:34
編集2017/01/13 14:29退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/13 14:13
退会済みユーザー
2017/01/13 14:13
2017/01/13 14:23
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/13 14:24