2

私のプログラムは整数配列に数値を入力しました。これをカウント配列と呼びました。

int[] array count = {5, 4, 3, 0};

ここで、for ループを使用して配列を水平方向にグラフィカルに印刷したいと考えています。すべての値をアスタリスクで出力したいのですが、例は次のようになります。

   *     
   *        *
   *        *        *
   *        *        *
   *        *        *
count(0) count(1) count(2) count(3)

まず、配列の最大値を調べたいと思います。この最大値が一致した場合、アスタリスクとして出力します。それ以外の場合はスペースです。ただし、ループして maxint - 1 を実行し、一致するかどうかを確認することはできません。これは、各配列の最大値のアスタリスクと残りのスペースのみを取得するためです。

だから私は回避策を作り、各最小値から始めて上向きに作業しようとしました。

for (int k = 0; k <= 6; k++) {
    System.out.println("NEXTLINE"); 
    maxInt = (maxInt - maxInt) + k;  
    for (int i = 0; i < controleArray.length; i++ ) { 
            int graphLetter = letterCount[i];
            for (int j = 0; j < 25; j++) { 
            //System.out.println("TESTinner ");  
                if (graphLetter > maxInt) {
                    System.out.print(" * ");
                    break;  
                } if (graphLetter <= maxInt) {
                    System.out.print(" ");
                    break; 
                }
            }

これまでのところ、このコードは配列の各値をカウントし、アスタリスクを出力しています。ただし、上下逆に印刷されているものがあります。したがって、出力は次のようになります。

*   *   *   NEXTLINE
*   *   *   NEXTLINE
*   *   *   NEXTLINE
*   *       NEXTLINE
*           NEXTLINE

なぜこれが起こるのですか?そして、この解決策を見るより良い方法は何ですか?

4

2 に答える 2

1
for (int k = 6; k >= 0; k--) {
    System.out.println("NEXTLINE"); 
    maxInt = (maxInt - maxInt) + k;  
    for (int i = 0; i < controleArray.length; i++ ) { 
            int graphLetter = letterCount[i];
            for (int j = 0; j < 25; j++) { 
            //System.out.println("TESTinner ");  
                if (graphLetter > maxInt) {
                    System.out.print(" * ");
                    break;  
                } if (graphLetter <= maxInt) {
                    System.out.print(" ");
                    break; 
                }
            }

これを試して。

于 2013-09-16T08:53:53.577 に答える
1
 maxInt = (maxInt - maxInt) + k;

(maxInt - maxInt) は常にゼロなので、ここで何かが間違っています。

maxInt をトリガーとして使用し、 instead を使用するvalue>=maxInt==、あなたが言うように loopを使用できます。

次に、2 つのループのみが必要になります。外側のループは各行を反復し、内側のループはグラフの各バーを反復します。次のようなものです。

//Given the max value of the graph maxInt
for (int i=maxInt;i>0;i--) {
    for (int j=0;j<count.length;j++) {
        if (count[j]>=i) {
            System.out.print(" * ");
        } else {
            System.out.print("   ");
        }
    }
    System.out.println("NEWLINE");
}

この方法はよりエレガントだと思います(よりシンプルで理解しやすいためです。

于 2013-09-16T09:14:17.273 に答える