2013-03-05 3 views
2

Мне нравится печатать строку, полученную в качестве ввода от пользователя в форме письма пирамиды буквой. Например - Когда пользователь дает ввод как «строка», то выход должен быть:Печать строки в пирамиде Форма

 s 
    s t 
    s t r 
    s t r i 
s t r i n 
s t r i n g 

Я попробовал небольшую программу, но она не устраивает слова в форме пирамиды. Программа

import java.io.*; 
    import java.util.Scanner; 
    import java.lang.String; 

    public class Mainer { 
    public static void main(String args[]){ 
     try 
     { 
      Scanner sc = new Scanner(System.in); 
      String s; 
      int l; 
      System.out.println("Enter the String : "); 
      s = sc.nextLine(); 
      l = s.length(); 
      for(int i=0; i<l;i++) 
      { 

       for(int j=0;j<i;j++) 
       { 
        System.out.printf("%c ",s.charAt(j)); 
       } 
       System.out.printf("%c\n",s.charAt(i)); 
      }   

     } 
     catch(Exception e) 
     { 
      System.err.println(e); 
     } 
    } 
} 

И выход из вышеуказанной программы (когда строка задаются в качестве входных данных) Введите строку: строку

s 
s t 
s t r 
s t r i 
s t r i n 
s t r i n g 

Вы можете сделать это расположено как в первом примере?

+10

Да, мы можем, но это ваша работа. –

+1

Вы не печатаете место где угодно, поэтому его так, как будто вы должны печатать пробелы перед началом печати символов. – kaysush

+6

Я чувствую домашнюю работу до Норвегии. – Andreas

ответ

2

Вам нужно добавить половину длину строки, как количество пробелов (отступы) в начале строки перед вами выходом Это. Но вычитая по 1 раз каждый раз, когда вы итерации, чтобы создать форму.

Или еще один способ сказать, что вы получаете длину исходной строки и печатаете количество пробелов для символов, которые вы не печатали.

for(int x = 0; x < l - i; x++) { 
    System.out.print(" ");   
} 
2

просто написать еще один цикл для печати пространства

for(int i=0; i<l;i++) 
{ 

    for(int j=0; j<l-(i+1); j++) 
    { 
     System.out.print(" "); 
    } 

    for(int j=0;j<i;j++) 
    { 
     System.out.printf("%c ",s.charAt(j)); 
    } 
    System.out.printf("%c\n",s.charAt(i)); 
} 

для записи, вы, возможно, придется настроить это.

+0

ИМХО в этом случае ваш ответ был бы лучше без кода, так как ОП - супруг, чтобы сам по себе. – Pshemo

+0

@ Pshemo вы боитесь, что OP может включить код, который я опубликовал, без грохота? –

+0

Я предполагаю, что OP, вероятно, видел примеры того, как работают петли. Все, что ему нужно сделать, это попытаться выяснить, как использовать их для решения различных проблем.Давать ему рыбу (код) вместо стержня (хороший общий совет) на самом деле не поможет ему в долгосрочной перспективе. PS. Извините за поздний повтор, я часто не использую английский :). – Pshemo

5

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

Таким образом, первый выход в псевдо-коде будет выглядеть примерно так:

String padding = (text.length/2) number of spaces; 
// The padding on the left. 
Print padding 
// The letter to print. 
Print first letter 

Имейте в виду, что длина прокладки будет изменяться с длиной текста, который вы выводя в этой итерации .. но Я не скажу вам об этом. Это испортит все удовольствие :)

+2

+1 для псевдокода –

0

Это должно сделать трюк

import java.io.*; 
import java.util.Scanner; 
import java.lang.String; 

public class Mainer { 
public static void main(String args[]){ 
    try 
    { 
     Scanner sc = new Scanner(System.in); 
     String s; 
     int l; 
     System.out.println("Enter the String : "); 
     s = sc.nextLine(); 
     l = s.length(); 
     for(int i=0; i<l;i++) 
     { 
      int padding = s.length() - i; 
      if (padding> 0) { 
       System.out.printf("%" + padding + "s", " "); 
      } 
      for(int j=0;j<i;j++) 
      { 
       System.out.printf("%c ",s.charAt(j)); 
      } 
      System.out.printf("%c\n",s.charAt(i)); 
     }   

    } 
    catch(Exception e) 
    { 
     System.err.println(e); 
    } 
} 
} 
2

это обман? (Только одна петля)

String s = "string"; 
     int len = s.length();   
     String tmp = ""; 
     for (char c : s.toCharArray()) { 
      tmp += tmp.length() > 0 ? " " + String.valueOf(c) : String.valueOf(c); 
      System.out.printf("%" + (len + tmp.length() - 1) + "s\n", tmp); 
      len--; 
     } 

выход:

 s 
    s t 
    s t r 
    s t r i 
s t r i n 
s t r i n g 
+0

это выглядит сложным! – Gowtham

+0

@ Gowtham нет, это не так. и это коротко. (только одна петля) :) – Kent

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