回答編集履歴

2 改正

tetratail

tetratail score 1191

2017/01/13 23:29  投稿

たとえば、以下のように実行しても無限回は試行されません
具体的にどのようなコードを書いて無限回実行されたのでしょうか
```java
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");
             
          }           
   }}}
}
}
```
書き加えられたコメント内のコードに足りない分を追加して実行すると以下のようなコードで何十行か有限回実行された結果が出力されました
```java
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()のメソッドの中で無限回ループが起きているのではないでしょうか
問題がある可能性が残るとすればgetActionName()ですが、このコードに関する部分で無限ループが起きているとすれば、getActionName()のメソッドの中で無限回ループが起きているのではないでしょうか 後はこの入れ子for文の入ったメソッド(今回は仮にddd()としたもの)の呼び出し部自体に無限ループが起きているかもしれない、です。
1 改正

tetratail

tetratail score 1191

2017/01/13 23:17  投稿

たとえば、以下のように実行しても無限回は試行されません
具体的にどのようなコードを書いて無限回実行されたのでしょうか
```java
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");
             
          }           
   }}}
}
}
```
```
書き加えられたコメント内のコードに足りない分を追加して実行すると以下のようなコードで何十行か有限回実行された結果が出力されました
```java
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()のメソッドの中で無限回ループが起きているのではないでしょうか

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る