2017-02-07 9 views
0

を印刷する私の割り当てはそうのようなダイヤモンドの形で単語を印刷することである。ダイヤモンド形式の単語

*****s 
****p*p 
***i***i 
**d*****d 
*e*******e  
r*********r 
*e*******e 
**d*****d 
***i***i 
****p*p 
*****s 

P.S.アスタリスクはスペースを表示するためにのみ存在し、アスタリスクは1つのスペースを表します。

は、これまでのところ私はこれを持っている:

完全にダイヤモンドの最初の半分を印刷し
public class DiamondWords 
{ 
    public static void main(String[] args) 
    { 
     Scanner kbReader = new Scanner(System.in); 
     System.out.print("Enter a word to be printed in diamond format: "); 
     String word = kbReader.nextLine(); 
     int wordLength = word.length(); 
     for(int i = 0; i<wordLength-1; i++) 
     { 
      System.out.print(" "); 
     } 
     wordLength = wordLength - 1; 
     System.out.print(word.charAt(0)); 
     System.out.println(); 
     int x =1; 
     int d =1; 

      for(int j =wordLength; j>0; j--) 
      { 
       wordLength = j; 
       for(int a =1; a<wordLength; a++) 
       { 
        System.out.print(" "); 
       } 
       System.out.print(word.charAt(x)); 
       for(int q =0; q<d; q++) 
       { 
        System.out.print(" "); 
       } 
       d+=2; 
       System.out.print(word.charAt(x)); 
       x++; 
       System.out.println(); 
      } 
      //r*********r 
      //*e*******e 
      //**d*****d 
      //***i***i 
      //****p*p 
      //*****s 
     } 
    } 

:私は印刷しなければならないとき

*****s 
    ****p*p 
    ***i***i 
    **d*****d 
    *e*******e  
    r*********r 

私は立ち往生てる部分だけがされダイヤモンドの後半。誰かが私を正しい方向に向けることができますか?私のためにコードを書いてはいけません。私が示した論理に基づいていくつかのポインタを試してみてください。ありがとうございました。

+1

上半分を見つけたら、別のループを書きますが、論理を逆転させて –

+0

とし、それぞれの半分はまったく同じ方法で線を書く必要があります。そのコードは、上部と下部のループで呼び出すことができる別のメソッド。 – slipperyseal

+0

@ ScaryWombat唯一の問題は、ロジックを逆にする方法を理解できないことです。それは私をイライラする – jpsizzls

答えて

0

ループが1つしかないようにしてください。問題の「技術」を扱う簡単な方法は、出力のためにchar配列を使って作業することです。最初に、適切な長さで初期化し、空白(ライブラリ関数があります)を入力し、2文字を入力してから、文字列に変換します。

唯一の未解決な問題は、文字を配置する場所であり、私はそれを台無しにしたくありません。

int fullLength = 2 * word.length() - 1; 
for(int i = 0; i < fullLength; i++) { 
    char[] line = new char[fullLength]; 
    Arrays.fill(line, ' '); 
    int k = ???; 
    char c = s.charAt(k); 
    line[word.length() - 1 - k] = c; 
    line[word.length() - 1 + k] = c; 
    System.out.println(new String(line)); 
} 

は明らかに、あなたは(私たちはword.length() - 1 +- kのようなものを持っている)、「途中から」位置を計算すると、単語の最初の半分を、kiに等しいです。

あなたの仕事は、あなたがそれを受け入れることを決めたら、単語の後半の "kを曲げる"方法を見つけることです。

0
import java.util.Scanner; 
public class DiamondWords 
{ 
    public static void main(String[] args) 
    { 
     Scanner kbReader = new Scanner(System.in); 
     System.out.print("Enter a word to be printed in diamond format: "); 
     String word = kbReader.nextLine(); 
     int wordLength = word.length(); 
     int wordLength2 = word.length(); 
     int wordSize = word.length(); 
     int wordLengthReverse = word.length(); 

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

     wordLength = wordLength - 1; 
     System.out.print(word.charAt(0)); 
     System.out.println(); 
     int x =1; 
     int d =1; 

     for(int j =wordLength; j>0; j--) 
     { 
      wordLength = j; 
      for(int a =1; a<wordLength; a++) 
      { 
       System.out.print(" "); 
      } 
      System.out.print(word.charAt(x)); 
      for(int q =0; q<d; q++) 
      { 
       System.out.print(" "); 
      } 
      d+=2; 
      System.out.print(word.charAt(x)); 
      x++; 
      System.out.println(); 
     } 

     System.out.print(" " + word.charAt(wordLength2-2)); 
     int spaceLength =((wordLength2*2)-1) -4; 
     int u =spaceLength -2; 
     for(int i =0; i < spaceLength; i++) 
     { 
      System.out.print(" "); 
     } 
     System.out.print(word.charAt(wordLength2-2)); 
     System.out.println(); 

     int m=3; 
     for(int num =2; num<wordSize-1; num++) 
     { 
      wordLength2 = num; 
      for(int i =0; i<num; i++) 
      { 
       System.out.print(" "); 
      } 
      System.out.print(word.charAt(wordSize-m)); 
      for(int b = 0; b<u; b++) 
      { 
       System.out.print(" "); 
      } 

      System.out.print(word.charAt(wordSize-m)); 
      System.out.println(); 
      m++; 
      u = u-2; 
     } 
     for(int r =0; r<word.length()-1; r++) 
     { 
      System.out.print(" "); 
     } 
     System.out.print(word.charAt(0)); 
    } 
} 

私は終了しました。これが私の最終的なコードです。私はそれができるだけ効率的ではない、または従うのが簡単だと理解していますが、柔軟でハードコードされていないので、私は満足しています。

関連する問題