簡體   English   中英

以菱形格式打印單詞

[英]Printing a word in a diamond format

我的任務是打印一個菱形的單詞,如下所示:

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

PS星號僅在此處顯示間距,假裝一個星號表示一個空格。

到目前為止,我有這個:

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

我唯一會卡住的部分是必須打印鑽石的后半部分。 誰能指出我正確的方向? 請不要為我編寫代碼,只需根據我所顯示的邏輯嘗試給我一些指針。 謝謝。

嘗試只有一個循環。 處理問題的“技術性”的一種非常簡單的方法是使用char數組作為輸出。 首先,以適當的長度對其進行初始化,將其填充為空白(有一個庫函數),填充兩個字符,然后將其轉換為字符串。

唯一開放的問題是在哪里放置角色,我不希望(也應該)破壞角色。

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 ),對於單詞的前半部分, k等於i

如果您決定接受,您的任務就是找出如何在單詞的后半部分“彎曲k ”。

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));
    }
}

我完成了。 這是我的最終代碼。 我知道它不是盡可能高效或易於遵循,但是它很靈活並且沒有硬編碼,所以我很滿意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM