簡體   English   中英

Java Print Number Square使用嵌套的for循環來旋轉數字

[英]Java Print number square with revolving numbers using nested for loops

/ *這里是完整的問題:
編寫一個名為printSquare的方法,該方法接受兩個整數參數(最小值和最大值),並以正方形模式打印介於min到max(含)范圍內的數字。 通過示例比通過解釋更容易理解正方形模式,因此請在下表中查看示例方法調用及其產生的控制台輸出。

正方形的每一行由最小和最大之間遞增整數的圓形序列組成。 每行打印此序列的不同排列。 第一行以min開頭,第二行以min +1開頭,依此類推。 當任何一行中的序列達到最大值時,它會回繞到最小值。

您可以假設方法的調用者將傳遞一個min和一個max參數,以使min小於或等於max。 * /

嗨,大家好,我有這個問題我無法解決。 調用此方法printSquare(1,5) ; 獲得此輸出:

12345

23451

34512

45123

51234

到目前為止,這是我的代碼。 我似乎無法讓前面的數字轉移到后面。

public static void printSquare (int startNum, int height){

        if (startNum == height){
            System.out.print(height);
            return;
        }

        for (int i = startNum; i <= height; i++){
            int max = startNum;
            int j = i;
            for (j = i; j <= height; j++){
                System.out.print (j); 
            }

        System.out.println();
        }            
}

如果您的內部循環以i開頭,則必須以height + i結束,而不僅僅是輸出要為正方形的height ,否則它將是一個三角形。 您想了解運算符%以確定除法的余數 ,以便處理“溢出”。

如果startNum != 1則您給出的說明不清楚應如何處理“溢出”。

此外,如果height實際上表示高度 (並且因為它表示printSquarewidth ),則保護條件(startNum == height)顯然是錯誤的。 我希望printSquare(4, 4)能打印四行和四列,而不僅僅是一行和一列。 命名似乎有問題。 通常,這種警衛人員是可疑的。 算法代碼應該通用,以至於不需要分別處理這種特殊情況。

這是一個可能的實現,適用於情況printSquare(1, 5); printSquare(1, 1); 對於其他情況,您的說明還不夠清楚。

public class Main {
    public static void main(final String... args) {
        printSquare(1, 5);
        printSquare(1, 1);
        //printSquare(2, 6);
        //printSquare(4, 4);
    }

    public static void printSquare(int startNum, int height) {
        for (int i = startNum; i < startNum + height; i++) {
            for (int j = i; j < height + i; j++) {
                System.out.print((j - 1) % height + 1);
            }
            System.out.println();
        }
        System.out.println();
    }
}

如果結束號不是僅由height決定,而是由startNum + height - 1 ,則可能的解決方案如下所示:

    public static void printSquare(int startNum, int height) {
        for (int i = startNum; i < startNum + height; i++) {
            for (int j = 0; j < height; j++) {
                System.out.print((j + i - startNum) % (height) + startNum);
            }
            System.out.println();
        }
        System.out.println();
    }

提供使用lambdas的替代Java 8解決方案。 對於一個簡單的任務來說可能是一個過大的殺傷力

public static void printSquaresJava8(int x, int y) {
  int count = y - x + 1;
  IntStream sequence = (IntStream.rangeClosed(x, y).<Integer>flatMap(i -> IntStream.rangeClosed(i, i + y).limit(count).<Integer>map(j -> j > y ? j - count : j)));
  List<Integer> numbers = sequence.boxed().collect(Collectors.<Integer>toList());

  IntStream.<Integer>rangeClosed(0,count-1).forEach(i ->
                                           {numbers.subList(count * i, count + count*i).forEach(j -> System.out.print(j + " "));
                                             System.out.println();
                                           }
  );

}

//用c ++編寫。 調用numberSquare(1,5),第一個for循環是您的行,第二個嵌套的for循環是您的列。 k從最小值開始。 col for循環將從最小值到最大值打印出k,在第一次迭代中,它將水平打印出1 2 3 4 5。 一旦k等於最大值,將其重置為最小值,以便外循環。 可以打印出從1到5的行。考慮它是像2D數組還是網格。

 void numberSquare(int min, int max) {
    for(int i = min; i <= max; i++) {
        int k = i;
        for(int j = min; j <= max; j++) {
            cout << k;
            if (k == max) {
                k = min;
            } 
            else k = k+1;
        }
        cout << endl;
    }
}

暫無
暫無

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

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