簡體   English   中英

字符串,重復,但不是從Java開頭開始(菱形模式

[英]String,which repeats ,but not starts from the beginning in Java (diamond pattern

這是我到目前為止所做的工作:我必須打印菱形圖案,該圖案始終從字符串的大寫字母開始,重復出現,但並不總是從開頭開始。

    public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    String userInput = keyboard.next();
    userInput = Character.toUpperCase(userInput.charAt(0)) + userInput.substring(1);
    int i;
    int j;
    if (userInput.length() % 2 != 0) {

        for(i = 1; i < userInput.length(); i += 2) {
            for(j = 0; j < userInput.length() - 1 - i / 2; ++j) {
                System.out.print(" ");
            }

            for(j = 0; j < i; ++j) {
                System.out.print(userInput.charAt(j));
            }

            System.out.println("");
        }

        for(i = userInput.length(); i > 0; i -= 2) {
            for(j = 0; j < userInput.length() - 1 - i / 2; ++j) {
                System.out.print(" ");
            }

            for(j = 0; j < i; ++j) {
                System.out.print(userInput.charAt(j));
            }

            System.out.print("\n");
        }
    } else {
        for(i = 2; i < userInput.length(); i += 2) {
            for(j = 0; j < userInput.length() - 1 - i / 2; ++j) {
                System.out.print(" ");
            }

            for(j = 0; j < i; ++j) {
                System.out.print(userInput.charAt(j));
            }

            System.out.println("");
        }

        for(i = userInput.length(); i > 0; i -= 2) {
            for(j = 0; j < userInput.length() - 1 - i / 2; ++j) {
                System.out.print(" ");
            }

            for(j = 0; j < i; ++j) {
                System.out.print(userInput.charAt(j));
            }

            System.out.print("\n");
        }
    }

}

例如,我的輸入是“ Peter”。 所以我的輸出是:

  P
 Pet
Peter
 Pet
  P

但必須是:

  P
 Ete
Rpete
 Rpe
  T

我不知道要做什么才能使這項工作生效

您需要進行一些更改:

  1. 聲明int n=0; int j;
  2. 始終打印userInput.charAt(n++ % userInput.length())而不是charAt(j)

  3. 為了只獲取大寫字母的第一個字符:

     char c = userInput.charAt(n++ % userInput.length()); c = j == 0 ? Character.toUpperCase(c) : Character.toLowerCase(c); System.out.print(c); 

檢查模運算符。

通過這些更改,您將獲得以下輸出:

  P
 Ete
Rpete
 Rpe
  T

這是您的代碼的較短版本:

public static void main(String[] args) {
    String userInput = "Peter";
    int length = userInput.length();
    int m, j, i, n = 0;
    for (m = length % 2 > 0 ? 1 : 2; m < length * 2; m += 2) {
        i = m < length ? m : length * 2 - m;
        for (j = 0; j < length - 1 - i / 2; ++j) {
            System.out.print(" ");
        }

        for(j = 0; j < i; ++j) {
            char c = userInput.charAt(n++ % length);
            c = j == 0 ? Character.toUpperCase(c) : Character.toLowerCase(c);
            System.out.print(c);
        }

        System.out.println("");
    }
}

鑒於輸入本身以cylic方式打印,因此我們可以利用它。 我的建議是連接輸入字符串並打印出由菱形圖案結構決定的子字符串。

public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        String userInput = keyboard.next();
        String concatenated = userInput;

        // build up the index array
        int i, cumSum = 0;
        ArrayList<Integer> helperIndex = new ArrayList<>();
        for(i = 1; i < userInput.length(); i += 2) {
            helperIndex.add(i);
            cumSum += i;
        }
        for(i = userInput.length(); i > 0; i -= 2) {
            helperIndex.add(i);
            cumSum += i;
        }
        int numOfWordRepitition = cumSum / userInput.length() ;
        for (i = 0; i < numOfWordRepitition; i++){
            concatenated += userInput;
        }

        // print out diamond
        String substr;
        int prev = helperIndex.get(0);
        int next = helperIndex.get(0);
        substr = concatenated.substring(0 , helperIndex.get(0));
        System.out.println(Character.toUpperCase(substr.charAt(0)) + substr.substring(1));
        for(i = 1; i < userInput.length(); i++){
            next += helperIndex.get(i);
            substr = concatenated.substring(prev , next);
            substr = Character.toUpperCase(substr.charAt(0)) + substr.substring(1);
            System.out.println(substr);
            prev = next;
        }

    }

暫無
暫無

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

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