2015-10-16 6 views
-3

Описание программы:Java вложенных циклов

Написать программу для печати 21 строк крестиков в форме большого X, как показано ниже. Убедитесь, что две строки пересекаются в строке «11».

Вот что я хочу в качестве выходного сигнала:

Sample output image

Вот то, что я до сих пор.

public class Program168h { 

    public static void main (String [] args) { 
     String d= "X"; 
     for (int a = 1; a < 23; a++) { 
      for (int b = a; b >= 1; b--) { 
       System.out.print(" "); 
      } 
      System.out.print(d); 
      for (int x = a; x < 22; x++) { 
       System.out.print(" "); 
      } 
      System.out.print(d); 
      System.out.println(); 
     } 
    } 
} 

Это производит только первую половину X, я не знаю, как произвести нижнюю половину.

+4

Так в чем ваш вопрос? – JonK

+2

Так в чем же вопрос? – Mureinik

+0

Как перейти к получению результата? Я сейчас застрял. Извините за неясность. – Basam

ответ

1

Попробуйте это:

int xSize = 21; 
int ySize = 21; 
String sign = "X"; 

for (int i = 0; i < xSize; ++i) { 
    for (int j = 0; j < ySize; ++j) { 
     if (i == j) { 
      System.out.print(sign); 
     } else if (i == ySize - j - 1) { 
      System.out.print(sign); 
     } else { 
      System.out.print(" "); 
     } 

    } 
    System.out.println(); 
} 

объяснение: Первый действуют на координаты Xaxis, второй для работает на YAxis. Наша задача - охватить диагональ. Покрытие первой диагонали - это где координата X == координатаY. В коде есть if (i == j). Это точки (1,1), (2,2) ... Вторая диагональ - это точки, где (x, y) = (20,1), (19,2), (18,3) .. .. Эта ситуация занимает второе место, если (i == ySize - j - 1).

+2

Поскольку вы предоставили решение этой домашней работы, можете ли вы также добавить объяснение, как вы создали его, чтобы OP мог учиться у него? В чем цель 'if (i == j)' и 'if (i == ySize - j - 1)'? – Pshemo

+0

его положения первой диагонали, где X происходит. позиции (1,1) (2,2) (3,3) ..... Next 'if' является второй диагональю, позиции (20,20) (19,19) ..... –

+0

Это не я, возможно, нуждается в этом объяснении, кроме OP. Отредактируйте свой ответ и добавьте эту информацию там. – Pshemo

0

Вы можете попробовать это:

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

    } 
} 
0

Хотя эти решения работают отлично, я пытался экспериментировать, не используя вложенную для и soultion, как показано ниже. Это будет иметь более высокую производительность, чем использование вложенных, для которых сложность O (n2) по сравнению с O (n) в этом.

 public void testXFormation() { 
     final int countOfLines = 21; 
     int countOfSpaceBefore = 0; 
     int countOfSpacesAfter = countOfLines -2 ;// 2 characters 
     boolean halfReached = false; 
     for (int index = 0; index < countOfLines; index++) { 
      printSpaces(countOfSpaceBefore); // print required no. of spaces 
      System.out.print("x"); // print first x 
      printSpaces(countOfSpacesAfter); // print required no. of spaces after x 
      if (index != (countOfLines/2))// Avoid printing double, in the middle 
       System.out.print("x"); 
      System.out.println(""); // move to next line 

      /* Once you reach half matrix we need to reverse the logic */ 
      if (index >= (countOfLines - 1)/2) { 
       halfReached = true; 
      } 

      /* Reversing the logic for the spaces to be printed */ 
      if (halfReached) { 
       countOfSpaceBefore--; 
       countOfSpacesAfter += 2; 
      } else { 
       countOfSpaceBefore++; 
       countOfSpacesAfter -= 2; 
      } 
     } 

    } 

    private void printSpaces(int count) { 
     for (int i = 0; i < count; i++) 
      System.out.print(" "); 
    } 
Смежные вопросы