2013-02-17 5 views
0

Это вопрос домашней работы, поэтому я хотел бы получить помощь, а не ответ.Как изменить строку чисел в вложенном цикле

Я пытаюсь создать 2 треугольника из чисел на основе числа, введенного пользователем.

"Enter a number between 2-9: "3" 
1 
12 
123 

    1 
21 
321 

IE2:

"Enter a number between 2-9: "5" 
1 
12 
123 
1234 
12345 

    1 
    21 
    321 
4321 
54321 

Я был в состоянии получить первый треугольник полностью. Но когда я добавляю свой вложенный цикл, он заполняет мой первый треугольник цифрами, созданными из вложенного цикла. Он также помещает все числа в прямую вертикальную линию. Я пробовал варианты для разных циклов гнезд и даже пытался возиться с StringBuilder, но все еще не увенчался успехом. Вот что я имею в коде до сих пор:

import java.util.Scanner; 

public class NestedLoops 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 

     System.out.print("Enter a Number between 2-9: "); 
     int width = input.nextInt(); 

     String r = ""; 
     for (int i = 1; i <= width; i++) 
     { 
      r = r + i; 
      System.out.println(r); 

     } 

    } 

} 

Опять же, я ищу помощь/понимание, а не просто ответ.

+0

Пожалуйста, наведите курсор на тег 'homework' и прочитайте, что там написано. – Xymostech

+0

вам нужно использовать вложенный цикл для назначения? Вы можете решить это в двух циклах без их вложения или даже с помощью нескольких более сложных манипуляций с строками. – twain249

+0

@ Xymostech, не могу использовать школу. предложения? –

ответ

0

попробовать

int width = 5; 
    // for all lines; number of lines = width 
    for (int line = 1; line <= width; line++) { 
     // print numbers from 1 to current line number 
     for (int n = 1; n <= line; n++) { 
      System.out.print(n); 
     } 
     // end of line 
     System.out.println(); 
    } 
    // add empty line between triangles 
    System.out.println(); 
    // for all lines; number of lines = width 
    for (int line = 1; line <= width; line++) { 
     // printing padding spaces, number of spaces = with - line number 
     int nSpaces = width - line; 
     for (int i = 0; i < nSpaces; i++) { 
      System.out.print(" "); 
     } 
     // print numbers from number of current line to 1 
     for (int n = line; n >= 1; n--) { 
      System.out.print(n); 
     } 
     // end of line 
     System.out.println(); 
    } 
+0

Пожалуйста, не обращайте внимания на мой последний комментарий, я не видел, где вы установите линию на 1 во втором цикле. – SkyVar

+0

это правило Java: in for (int line = 1; line <= width; line ++) {..} строка var видна только внутри блока {}. Он отличается от C++ –

0

Вам нужно использовать очередь. например. http://docs.oracle.com/javase/1.5.0/docs/api/java/util/LinkedList.html

Завершите цифры, пока не достигнете максимума, а затем начните их декомпрессию.

И в то время как вы из очереди, вам нужно применить реверс

Queue<String> q = new LinkedList<String>(); 
     for (int i = 1; i <= width; i++) 
     { 
      r = r + i; 
      q.add(r); 
      System.out.println(r); 

     } 

     while(!q.isEmpty()){ 
      String j = q.remove(); 
      //reverse j 
      System.out.println(reverse(j)); 
     } 

Я оставляю реверсивную часть для вас, чтобы сделать :)

+0

Если у вас есть пример, вы можете показать мне? – SkyVar

0

Вы можете просто добавить еще один цикл после первого цикла, как

String r = ""; 
String space = ""; 
    for (int i = width; i >= 1; i--) 
    { 
     r = r + i; 
     System.out.println(r); 

    } 

Попробуйте. пока не тестировалась

1

Есть два аспекты второй части вопроса.

  1. Вы должны генерировать строки с цифрами в обратном порядке:

    • Вы можете сделать это путем добавления номера на другом конце.
    • Вы можете сделать это, изменив порядок строк.
  2. Вам необходимо уложить, что есть пробелы слева.

    • Вы можете сделать это, добавив необходимое количество пробелов в левый конец строки.
    • Вы можете сделать это с помощью System.out.format (...) с шаблоном, который правильно выравнивает строку в поле с требуемым количеством символов. (Хорошо, что это немного слишком неясными ...)

Или, вы можете создать строку в символ массива или строки строителем, а не с помощью конкатенации.

«Трюк» - это выяснить, какую стратегию вы собираетесь использовать ... прежде чем начинать резку кода.

0
public static void main(String[] args) 
{ 
    int n = 5; 

    for(int i=1; i<=n; i++) 
    {    
     for (int j=(n*2), k=n; j>1; j--) 
     { 
      if (k <= i) 
      { 
       System.out.print(k); 
      } 
      else 
      { 
       System.out.print('*'); 
      } 

      k += (j)-1 > n ? -1 : 1; 
     } 

     System.out.println(); 
    } 
} 
0

Просто попытался реализовать в scala. Игнорируйте, если вам это не нравится .. :-)

class Triangle extends App 
{ 
    val width = Console.readInt() 

    if (width < 2 || width > 9) 
    { 
    throw new RuntimeException() 
    } 

    var i, j = 1; 

    for (i <- 1 to width) 
    { 
    for (j <- 1 to i) 
    { 
     print(j) 
    } 
    print("\n") 
    } 

    for (i <- 1 to width) 
    { 
    for (dummy <- 1 to width-i) 
    { 
     print(" ") 
    } 
    for (j <- i to 1 by -1) 
    { 
     print(j) 
    } 
    print("\n") 
    } 
} 
Смежные вопросы