2013-03-05 4 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

그것. 그러나 모양을 생성하기 위해 반복 할 때마다 매번 공백 하나를 뺍니다.

또는 다른 방법으로는 원래 문자열의 길이를 얻고 인쇄하지 않은 문자의 공백 수를 인쇄하는 것입니다.

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

IMHO이 경우 OP는 혼자서 생각할 배우자이기 때문에 코드없이 답을 얻는 편이 낫습니다. – Pshemo

+0

@Pshemo OP가 Groking하지 않고 게시 한 코드를 통합하는 것이 가능합니까? –

+0

OP에서 루프가 어떻게 작동하는지 예제를 보았다고 가정합니다. 지금해야 할 일은 다른 종류의 문제를 해결하는 방법을 찾는 것입니다.낚싯대 대신에 생선 (코드)을 주면 (좋은 일반적인 조언) 장기적으로 도움이되지는 않습니다. 추신. 늦게까지 재생해서 죄송합니다. 자주 영어를 사용하지 않습니다 :). – 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

의사 코드 –

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

의 경우 +1이 복잡해 보입니다! – Gowtham

+0

@Gowtham 아니오, 그렇지 않습니다. 그것은 짧다. (단 하나의 루프) :) – Kent