2016-06-06 3 views
0

Я пытаюсь распечатать алмаз на основе ввода пользователем, используя для циклов. Я получил его, чтобы распечатать правую сторону алмаза, но не могу заставить его распечатать левую сторону. Я попытался изменить мой код безрезультатно. У меня возникли проблемы с выяснением логики, чтобы мой код распечатывал весь бриллиант. Заранее спасибо!Алмаз, используемый для петли

Ожидаемый выход, если Num = 2 (без линий, конечно):

* 
*$* 
* 

Вот мой код до сих пор:

+4

Не могли бы вы опубликовать ожидаемый результат? – Tunaki

+0

@ Tunaki, если num = 2, ожидаемый результат: __ * __ _ * $ * _ __ * __ – SMcGwier

+0

Можете ли вы [изменить] это в вопрос? – Tunaki

ответ

0

Вы в основном только нужно добавить еще один цикл (один для верхней половины и один для нижней половины), в котором вы добавляете достаточное количество пробелов на каждой линии для центрирования алмаза:

for (int i=num; i>0; --i){ 
    //Insert spaces in order to center the diamond 
    for (int n=0; n<i; ++n){ 
     System.out.print(" "); 
    } 
    System.out.print("*"); 
    for (int n=i; n<num; ++n){ 
     System.out.print("$*"); 
    }//Ending bracket of nested for loop 
    System.out.println(); 
}//Ending bracket of for loop 
//Print out a diamond shape based on user input 
for (int i=0; i<=num; ++i){ //<= to print the last asterisk 
    //Insert spaces in order to center the diamond 
    for (int n=0; n<i; ++n){ 
     System.out.print(" "); 
    } 
    System.out.print("*"); 
    for (int n=i; n<num; ++n){ 
     System.out.print("$*"); 
    }//Ending bracket of nested for loop 
    System.out.println(); 
}//Ending bracket of for loop 

Я не уверен в логике корреляции между num и формой алмаза в вашем примере. Мой код печатает желаемый бриллиант для num = 1 не num = 2. Таким образом, в этом коде num определяется максимальная ширина алмаза (количество знаков $). Так num = 2 печатает:

* 
*$* 
*$*$* 
*$* 
    * 

Если вы хотите

* 
*$* 
* 

для num=1 и так далее, вы можете просто заменить все вхождения num с num-1 в приведенном выше коде. Кроме того, вы также можете добавить строку

num--; 

перед кодом и оставить все остальное как есть.

+0

УДИВИТЕЛЬНЫЙ! Однако, когда я запускаю код, он не распечатывает последнюю звездочку для последней строки (она делала это с самого начала). Вы знаете, почему это так и как его исправить? – SMcGwier

+0

Вы скопировали полный код или только внутренние петли? Моя версия должна печатать последнюю звездочку, потому что я изменил условие второго основного цикла на 'i <= n' вместо' i Keiwan

+0

Я полностью пропустил это. Спасибо, так много за вашу помощь! Я продолжал думать, что это было нечто более сложное, чем расстояние. – SMcGwier

0

Ну, я должен опоздать, чтобы ответить, Кэйван избил меня. Но вот петля с нуля. Возможно, это все еще полезно для вас или для кого-то еще. Я также не смог понять, для какого числа использовался, поэтому я использовал его как количество слоев из центра.

// The number variable. 
int num = 2; // Num is used to specify the amount of layers. 
// used variables 
int size = num * 2 + 1; // total size of the diamond. 
int i; // row 
int j; // col 
int a; // amount to draw 
int s; // start to draw 
if (num == 0) { 
    // The diamond has a thickness of 0, only print the center 
    System.out.print("$"); 
} else if (num >= 1) { 
    // the diamond has a thickness of at least 1. 
    for (i = 1; i <= size; i++) { 
     for (j = 1; j <= size; j++) { 
      if (i == num + 1 && j == num + 1) { 
       // We are in the center, print the $ and continue 
       System.out.print("$"); 
       continue; 
      } else { 
       if (i <= num + 1) { 
        // amount is row times 2 minus one 
        a = i * 2 - 1; 
       } else { 
        // Inverted: amount is (size minus row plus 1) times two minus one 
        a = (size - i + 1) * 2 - 1; 
       } 
       // starting point is (thickness plus one) minus (amount divided by two) 
       s = (int)((num + 1) - (a/2)); 
       // if col is bigger or equals start and col is less or equals start plus amount minus one 
       if (j >= s && j <= s + a - 1) { 
        // print a "#"; 
        System.out.print("#"); 
       } else { 
        // we are not suppose to print, print a space. 
        System.out.print(" "); 
       } 
      } 
     } 
     // reached the end of the line, begin on a new lie 
     System.out.print("\n"); 
    } 
} 

Выход: num = 1;

# 
#$# 
# 

Выход: num = 2;

# 
### 
##$## 
### 
    # 

Выход: num = 15;

   #    
       ###    
      #####    
      #######    
      #########   
      ###########   
     #############   
     ###############   
     #################  
     ###################  
    #####################  
    #######################  
    ######################### 
    ########################### 
############################# 
###############$############### 
############################# 
    ########################### 
    ######################### 
    #######################  
    #####################  
     ###################  
     #################  
     ###############   
     #############   
      ###########   
      #########   
      #######    
      #####    
       ###    
       # 

EDIT: 1 Малый редактировать в комментариях источника (опечатки)

Смежные вопросы