2014-09-19 9 views
0

Я новичок в java, и я пытаюсь напечатать английскую линейку горизонтально, а не вертикально, любая помощь приветствуется.Я пытаюсь напечатать эту линейку горизонтально в java

Я попытался поставить образец вывода, но мне нужна 10 репутации, но он очень похож на английскую линейку. Вот ссылка на фото http://i.stack.imgur.com/y8beS.jpg

public class MyRuler 
{ 

    public static void main(String[] args) 
    { 
     drawRuler(3, 3); 
    } 

    public static void drawOneTick(int tickLength) 
    { 
     drawOneTick(tickLength, -1); 
    } 

    // draw one tick 
    public static void drawOneTick(int tickLength, int tickLabel) 
    { 
     for (int i = 0; i < tickLength; i++) 
      System.out.print("|\n"); 
     if (tickLabel >= 0) 
      System.out.print(" " + tickLabel + "\n"); 
    } 

    public static void drawTicks(int tickLength) 
    { // draw ticks of given length 
     if (tickLength > 0) 
     { // stop when length drops to 0 
      drawTicks(tickLength - 1); // recursively draw left ticks 

      drawOneTick(tickLength); // draw center tick 

      drawTicks(tickLength - 1); // recursively draw right ticks 
     } 
    } 

    public static void drawRuler(int nInches, int majorLength) 
    { // draw ruler 
     drawOneTick(majorLength, 0); // draw tick 0 and its label 
     for (int i = 1; i <= nInches; i++) 
     { 
      drawTicks(majorLength - 1); // draw ticks for this inch 
      drawOneTick(majorLength, i); // draw tick i and its label 
     } 
    } 
} 
+2

Предложения: Формат кода (я сделал это на этот раз), обеспечивает вывод, который вы хотите от кода, и прочитать правила о задании вопросов (как спросить) о переполнении стека –

+0

Удалить «\ n» и заменить | с - возможно – bdavies6086

+0

| | | | | | | | | | | | | | | | | Я сделал выборку здесь Формула - наименьшая отметка на 1/2^

ответ

0

Если вы не собираетесь аа специальной формулы для презентации (т.е. это, скорее всего, не будет масштабироваться до фактического правителя) и просто хотите, чтобы вывод на печать по горизонтали, удаление все экземпляры \n из вашего кода делают печать в строке.

public static void drawOneTick(int tickLength, int tickLabel) 
{ 
    for (int i = 0; i < tickLength; i++) 
     System.out.print("|"); 
    if (tickLabel >= 0) 
     System.out.print(" " + tickLabel); 

} 
+0

Да, я пробовал это, но не выглядел как линейка, хотя Представьте себе линейку на 3 дюйма, например, это то, что нужно для вывода выглядят как –

0

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

enter image description here

Учитывая Я Европейский, и я думаю, что имперская система странная и крупная излишества, мой правитель будет измерять в метрической системе :) (сантиметры и миллиметры)

Итак, основная идея состоит в том, чтобы отделить каждый ряд тиков или ярлыков, как это своя String как:

String1 = | | | | | | | | | | | | | | | | | | | | | | | ... // regular ticks 
String2 = |     |     |  ... // ticks to labels 
String3 = 0     1     2   // labels 

Мы строим каждую строку отдельно, то объединить их с характером новой строки '\n' между ними, таким образом они будут печатать правильно. Вы также должны убедиться, что количество пробелов является точным, чтобы строки правильно выравнивались.

Вот код:

class MyRuler { 

    StringBuilder ticks = new StringBuilder(); 
    StringBuilder ticksToLabels = new StringBuilder(); 
    StringBuilder labels = new StringBuilder(); 

    int millimetersPerCentimeter = 10; 

    String drawRuler(int centimeters) { 
     // append the first tick, tick to label, and label 
     ticks.append("| "); 
     ticksToLabels.append("| "); 
     labels.append(0); 

     for(int i = 0; i < centimeters; i++) { 
      for(int j = 0; j < millimetersPerCentimeter; j++) { 
       if(j == millimetersPerCentimeter - 1) { 
        ticksToLabels.append("| "); 
        labels.append(" " + (i + 1)); 
       } else { 
        ticksToLabels.append(" "); 
        labels.append(" "); 
       } 
       ticks.append("| "); 
      } 
     }  
     ticks.append("\n" + ticksToLabels.toString() + "\n" + labels.toString()); 
     return ticks.toString(); 
    } 

    public static void main(String[] args) { 
     MyRuler ruler = new MyRuler(); 
     System.out.println(ruler.drawRuler(5)); 
    } 
} 

Выходные:

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 
|     |     |     |     |     | 
0     1     2     3     4     5 
+0

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