2016-10-20 11 views
0

次のforループをwhileループに変換する方法を理解しようとしていますが、出力は元のループとかなり似ていますがスペースはありません。基本的に小さな*印を表示してXを画面に表示しています。それを書き直そうとすると、同じ量の*が得られますが、空白がないので、次の行に次の行が印刷されます。これは直線になります。forループをwhileループに書き直す

編集:私はj = MINを提案したように再割り当てしましたが、私に質問される質問はforをwhileループに変換し、if-else 1つのif-else-if-elseステートメントのみを持つステートメント

ここでは、元のです:

ここ

パブリッククラスプラクティス {

public static void main(String[] args) 
{ 
    final int MIN = 1; 
    final int MAX = 7; 
    int i; 
    int j; 

    for (i = MIN; i<=MAX; i++) 
    { 
     for (j = MIN; j<=MAX; j++) 
     { 
      if (i==j) 
       if (i == (MIN+MAX)/2) 
        System.out.print("o"); 
       else 
        System.out.print("*"); 
      else if (i+j == MIN+MAX) 
       System.out.print("*"); 
      else 
       System.out.print(" "); 
     } 
     System.out.println(); 
    } 

} 

}

私の試みです:

public static void main(String[] args) 
{ 
    final int MIN = 1; 
    final int MAX = 7; 
    int i = MIN; 
    int j = MAX; 

    while (i <= MAX) 
    { 
     j = MIN; 
     while (j <= MAX) 
     { 
      if(i == j && i == (MIN+MAX)/2) 
      { 
       System.out.print('o'); 
      } 
      else 
      { 
       System.out.print("*"); 
      } 
      if (i + j == MIN + MAX) 
      { 
       System.out.print("*"); 
      } 
      else 
      { 
       System.out.print(" "); 
      } 
      j++;    
     } 
     System.out.println(); 
     i++; 
    } 

} 

}

+0

あなたは何を試してみましたか?違いがどこで発生したのか正確に確認するためにコードをステップ実行しようとしましたか?これは少しの試行錯誤で把握するのは非常に難しいことではありません。 –

+0

if文を組み合わせないでください。そのままそのまま残してください。 –

答えて

0

はあなたのソリューションです:と

public static void main(String[] args) { 
     final int MIN = 1; 
     final int MAX = 7; 
     int i = MIN; 
     int j = MAX; 

     while (i <= MAX) { 
      j = MIN; 
      while (j <= MAX) { 
       if (i == j) 
        if (i == (MIN + MAX)/2) 
         System.out.print("o"); 
        else 
         System.out.print("*"); 
       else if (i + j == MIN + MAX) 
        System.out.print("*"); 
       else 
        System.out.print(" "); 
       j++; 
      } 
      System.out.println(); 
      i++; 
     } 
    } 

を改訂1つだけの場合:

public static void main(String[] args) { 
    final int MIN = 1; 
    final int MAX = 7; 
    int i = MIN; 
    int j = MAX; 

    while (i <= MAX) { 
     j = MIN; 
     while (j <= MAX) { 
      if ((i == j) && (i == (MIN + MAX)/2)) 
       System.out.print("o"); 
      else if ((i + j == MIN + MAX) || (i == j)) 
       System.out.print("*"); 
      else 
       System.out.print(" "); 
      j++; 
     } 
     System.out.println(); 
     i++; 
    } 
} 
+0

申し訳ありません私に質問された質問は、forループをwhileループに変換し、一連のif-elseステートメントをif-else-if-elseステートメント。 – Jake0991

+0

元のコードをただ1つだけ使用するように更新しました。 – facundop

+0

これは完全に機能します!ありがとうございました! – Jake0991

0

ネストされたwhileループの前に、j = MAX;の代わりにj = MIN;を初期化する必要があります。

また、ネストされたif - else構造は元のものと同等ではありません。

0

これを試してみてください:

ここ
public static void main(String[] args) 
{ 
    final int MIN = 1; 
    final int MAX = 7; 
    int i = MIN; 
    int j = MIN; 

    while (i++ <= MAX) 
    { 
     while (j++ <= MAX) 
     { 
      if (i==j) 
       if (i == (MIN+MAX)/2) 
        System.out.print("o"); 
       else 
        System.out.print("*"); 
      else if (i+j == MIN+MAX) 
       System.out.print("*"); 
      else 
       System.out.print(" "); 
     } 
     System.out.println(); 
    } 

} 
+0

申し訳ありません私は、forループをwhileループに変換してif- 1つのif-else-if-elseステートメントのみを含むelseステートメント – Jake0991

関連する問題