2015-01-15 6 views
1

Я пытаюсь отразить это искусство по вертикали.Зеркало ASCII art

Пример:

From this

To this

Но вот то, что я в конечном итоге получить:

enter image description here

Вот код:

String reverse; 

for(int i=1;i<coolDragon.size();i++) // coolDragon is the name of the art. It is a txt file that I'm reading 
{ 
    reverse = ""; 
    for (int j=coolDragon.get(i).length()-1;j>=0;j--) // probably the worst line of code 
     reverse=reverse+coolDragon.get(i).charAt(j); 
    System.out.println(reverse); 
} 

Это просто реверсирует каждую строку в каждой строке. Есть ли какие-то дополнения, которые мне нужно сделать здесь, чтобы добиться идеального асимметричного разворота? Любые другие предложения?

ответ

6

Вы должны узнать, какая строка входного файла имеет большинство символов, а затем вы должны править каждую строку пробелами, чтобы все строки имели одинаковую длину, прежде чем вы их отмените.

Например, если вы делаете не правильно набивать первую строку здесь с одним пробелом:

XO 
XXX 

Вы получите перевернутую выход:

OX 
XXX 

Когда то, что вы хотите :

OX 
XXX 

Также обратите внимание, что вы пропускаете первую строку файла. i должна начинаться с 0.

Код должен выглядеть следующим образом:

int maxLen = 0; 
for(int i=0;i<coolDragon.size();i++) { 
    if (cooDragon.get(i).length() > maxLen) 
     maxLen = cooDragon.get(i).length(); 
} 
StringBuilder reverse = new StringBuilder(maxLen); 
for(int i=0;i<coolDragon.size();i++) { 
    reverse.setLnegth(0); 
    for (int k=0; k<maxLen - coolDragon.get(i).length();k++) // add spaces 
     reverse.append(' '); 
    for (int j=coolDragon.get(i).length()-1;j>=0;j--) 
     reverse.append(coolDragon.get(i).charAt(j)); 
    System.out.println(reverse.toString()); 
} 
+0

Я пытался избежать внесения изменений в данной области, но это, кажется, мой единственный вариант – Ariam

+1

@Ariam Вы на самом деле не изменяя Изобразительное искусство. Чтобы иметь возможность обратить вспять искусство, вы должны рассматривать свой ввод как прямоугольник (т. Е. Все строки имеют одинаковую длину). Добавление конечных пробелов в строки исходного искусства не изменяет искусство. – Eran

+0

Я прокомментировал, прежде чем увидел остальную часть вашего кода. Но это именно то, что я искал. Большое спасибо за ответ и объяснение! – Ariam

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