2017-09-19 17 views
-4

私はここでできるほど具体的です。私の研究室では、ユーザーが1から9までの任意の数を入力できるJavaコンソールアプリケーションが必要です。コンピュータは各数値の三角形を印刷し、三角形は画面の右側に揃えなければなりません。次に例を示します。ここでは正方形の三角形java

  1 
     4 1 
    9 4 1 
16 9 4 1. 

は私のコードは、これまでのところです:

import java.util.Scanner; 

public class Triangle { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter a number between 1 and 9 inclusive:"); 
     int n = input.nextInt(); 
     for (int i = 1 ; i <=n; i++) { 
      for (int j = n-i; j >=1; j--) { 
       System.out.print(" "); 
      } 
      for (int k = i; k <=i; k++) { 
       System.out.print(" " + i * i); 
      } 
      System.out.println(" "); 
     } 
    } 
} 

そして、ここでは私の出力です:

  1 
     4 
    9 
16 

ここに私の問題は、私は上の各番号を繰り返すことができることです各行は完全に三角形を塗りつぶしますが、100万個のネストループを作成せずに各前の数のsqrtをどのように印刷するかを理解することはできません。 私が得ることができるどんな助けも非常に高く評価されるでしょう。

答えて

0

のみ第二の内側ループが少し調整する必要がある(太字の変化):

for (int k = i; k >= 1; k--) { 
    System.out.printf(" %2d", k * k); 
}

最初インデントの内側ループはn-i回実行されるので、2番目の内側ループは残りの部分を実行する必要があります。i..1

外側ループ変数iの代わりに内側ループ変数kの正方形を印刷する必要があります(内部ループでは変更されません)。

0

問題は、IKを初期化し、その後、ループを停止する第二のループ

 for (int k = i; k <=i; k++) { 

ためのループ限度にあるときK> I。これは「標準」インクリメントで1回だけ実行できます。あなたが行の最後にKを実行する必要があります

 for (int k = i; k <=n; k++) { 
0

外側のループの前にいくつかのインクリメント変数を追加して追加する必要がありました。外側のループでも、内部ループの各サイクルの全体的なカウントとインクリメントから減算する必要がありました。

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter a number between 1 and 9 inclusive:"); 
    int n = input.nextInt(); 
    int num = 0, temp = 0; 
    for (int i = 1 ; i <=n; i++) { 
     int l = 0; 
     num++; 
     temp = num * num; 
      for (int j = n-i; j >=1; j--) { 
      System.out.print(" "); 
      } 
      for (int k = 1; k <=i; k++) { 


      System.out.print(" " + temp); 

      l++; 
      temp = i -l; 
      temp = (int)Math.pow(temp, 2); 

         } 

      System.out.println(" "); 

    } 






    } 

}