2

forループで次のパターンを作成します。

XXXXXXXXXX
XXXXXXXXXY
XXXXXXXXYY
XXXXXXXYYY
...

..等々

public class ex{
    public static void main(String[] args){
            for(int i=0;i<=10;i++){
                    System.out.println();
                    for(int j=0;j<=10;j++){
                            if(i==0){
                                    System.out.print("X");
                            }

                            if(i==1){
                                    System.out.print("X");
                                    if(j==9){
                                            System.out.print("Y");
                                    }
                            }
                    }
            }
    }

}〜

不要な出力に対して、最後に余分な「X」が表示されます。これを行うにはもっと良い方法があると思いますが、今は方法を考えることができません

助けてくれる人はいますか?

4

6 に答える 6

3

1つのループ内に2つのループをネストしてみてください。外側のループの各反復でカウントアップしてからカウントアップiを続けます。10

// 10 lines
for(int i = 10; i >= 0; i--){

    int j = 0; 

    // Print 'X's (10 - i of them)
    for(; j < i; j++)
        System.out.print("X");

    // Print 'Y's (i of them)
    for(; j < 10; j++)
        System.out.print("Y");

    System.out.println();
}
于 2012-06-06T21:46:27.603 に答える
0

ヒント:各行の長さは同じで、下の各行にはXが1つ少なく、Yが1つ多くなっています。

public class XY
{
        public static void main(String[] args)
        {
                System.out.print(xy(10,10));
        }
        public static String xy(int rows,int origRows)
        {
                return X(rows,origRows-rows)+"\n"+((rows>0)?xy(rows-1,origRows):"");
        }
        public static String X(int x,int y)
        {
                return (x>0?"X":"")+((x>0||y>0)?X(x-1,y-1):"")+(y>0?"Y":"");
        }
}

teehee。

于 2012-06-06T21:46:08.407 に答える
0

あなたの特定の質問に対する答えは次のとおりです。

for(int i=0;i<=10;i++)

i<=10i<100から10(両端を含む)には11のループがあるため、である必要があります。

于 2012-06-06T21:47:06.683 に答える
0

おそらく最も効率的なバージョンではありませんが、ここにあります:

public static void main(String[] args) {
    for (int i = 0; i <= 10; i++) {
        System.out.println(repeat("X", 10 - i) + repeat("Y", i));
    }
}

private static String repeat(String string, int times) {
    return new String(new char[times]).replaceAll("\0", string);
}
于 2012-06-06T21:53:24.103 に答える
0

行列の/対角線の条件はi+j = nであるため、左上の部分はi + j <nであり、右下の部分はi +j>nです。

public static void main(String... arg) {
    int n = 10;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if ( i + j < n) {
                System.out.print("X");
            } else {
                System.out.print("Y");
            }
        }
        System.out.println();
    }
}

\対角線上で分離する場合、対角線の条件はi = j、上部i> j、下部i<jです。

于 2012-06-06T21:56:44.947 に答える
0

再帰的な解決策は次のとおりです。

 public class ex {
    public static final String X = "X";
    public static final String Y = "Y";

    public static void main(String[] args){
      printall(10, 0);
    }

    private static void printall(int length, int saturation){
      if (saturation > length) {
        return;
      } else {
        System.out.print(printRow(length, saturation, 0);
        printall(length, saturation + 1);
      }
    }

    private static String printrow(int length, int saturation, int position) {
      if (position > length) {
        return "";
      } else {
        return getChar(length, saturation, position) + printrow(length, saturation, position + 1);
      }
    }

    private static String getChar(int length, int saturation, int position) {
      if (length-saturation < position) {
        return Y;
      } else {
        return X;
      }
    }
  }
于 2012-06-06T22:02:17.353 に答える