由於任務看在現實中很複雜很容易。開始時可能看起來很難。因爲你在考慮最終結果而不是關於指導結果的路線。
要改變我們可以使用舊的編碼規則,divide and conquer。本書告訴我們,在複雜問題中找到相似的東西,可以將主要問題簡化爲我們能夠執行的簡單任務。換句話說,我們在很少人看來,解決了我們的大問題,這可以很容易地解決,最後我們將小結果付諸大局。
所以,最好從你的問題開始。
問題1:如何打印pytamind數字?
因爲我們不知道,所以讓我們專注於別的東西。
爲了提高我們的觀察,我們可以添加一些細節bacground
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
0 _ _ _ _ _ _ _ _ 9 _ _ _ _ _ _ _ _
1 _ _ _ _ _ _ _ 8 9 8 _ _ _ _ _ _ _
2 _ _ _ _ _ _ 7 8 9 8 7 _ _ _ _ _ _
3 _ _ _ _ _ 6 7 8 9 8 7 6 _ _ _ _ _
4 _ _ _ _ 5 6 7 8 9 8 7 6 5 _ _ _ _
5 _ _ _ 4 5 6 7 8 9 8 7 6 5 4 _ _ _
6 _ _ 3 4 5 6 7 8 9 8 7 6 5 4 3 _ _
7 _ 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 _
8 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
現在是觀察的時間。
從這個觀察我們可以想出以下想法。
Idead:金字塔形是兩個三角形的結構。
結論:寫一半這種金字塔比較容易。所以讓我們回到酸味問題。 Q2:如何編寫看起來像三角形的序列號?
這真的很簡單,我們只需要兩個循環,第一個循環將負責行的另一列。
for(int column = 1; column <= 9; column++) {
for(int row = 1; row <= 9; row++) {
if(column ## row) { // Observe what will happen if we use == or <= or > or <>
System.out.print(row);
} else {
System.out.print(" ");
}
}
System.out.println(' ');
}
當你完成你的第一個任務,你將能夠打印在screean數字squers,triagles,線。
所以,當我們知道如何打印一個三角形是這樣的:
r
c 1 2 3 4 5 6 7 8 9
1 _ _ _ _ _ _ _ _ 9
2 _ _ _ _ _ _ _ 8 9
3 _ _ _ _ _ _ 7 8 9
4 _ _ _ _ _ 6 7 8 9
5 _ _ _ _ 5 6 7 8 9
6 _ _ _ 4 5 6 7 8 9
7 _ _ 3 4 5 6 7 8 9
8 _ 2 3 4 5 6 7 8 9
9 1 2 3 4 5 6 7 8 9
我們應該修改你的代碼,會更適合,通常在計算機世界運營從零不是一個開始。
r
c 0 1 2 3 4 5 6 7 8
0 _ _ _ _ _ _ _ _ 9
1 _ _ _ _ _ _ _ 8 9
2 _ _ _ _ _ _ 7 8 9
3 _ _ _ _ _ 6 7 8 9
4 _ _ _ _ 5 6 7 8 9
5 _ _ _ 4 5 6 7 8 9
6 _ _ 3 4 5 6 7 8 9
7 _ 2 3 4 5 6 7 8 9
8 1 2 3 4 5 6 7 8 9
當你成功了,我們暫時停下來想一想。
爲什麼我們不得不爲每一行重複所有這些操作?如果我們可以放置一些有價值的東西,那麼我們不必再考慮和計算它們,只需要將整個結果寫入屏幕即可。
這個問題的解決方案是數組和應用程序的概念,被稱爲dynamic programing。在這種方法中,我們試圖記住一些將用於未來操作的東西。
因此,蠕蟲只需將數字分配給數組而不是打印它們即可。
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [9]
[ ] [ ] [ ] [ ] [ ] [ ] [ ] [8] [9]
[ ] [ ] [ ] [ ] [ ] [ ] [7] [8] [9]
[ ] [ ] [ ] [ ] [ ] [6] [7] [8] [9]
[ ] [ ] [ ] [ ] [5] [6] [7] [8] [9]
[ ] [ ] [ ] [4] [5] [6] [7] [8] [9]
[ ] [ ] [3] [4] [5] [6] [7] [8] [9]
[ ] [2] [3] [4] [5] [6] [7] [8] [9]
[1] [2] [3] [4] [5] [6] [7] [8] [9]
在,你應該用代碼想出了這樣
int[] array = new int[9];
for(int column = array.length; column > 0 ; column--) {
for(int row = 0; row <= array.length; row++) {
if(column == row) {
array[row-1] = column;
}
}
System.out.println(Arrays.toString(array));
}
那麼,什麼是從該代碼清楚,是我們每一個步驟中使用只設定一個值。這是呈現如下
9 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [9] -Step one we put nine
8 [ ] [ ] [ ] [ ] [ ] [ ] [ ] [8] [ ] -Step two we put eight
7 [ ] [ ] [ ] [ ] [ ] [ ] [7] [ ] [ ]
6 [ ] [ ] [ ] [ ] [ ] [6] [ ] [ ] [ ]
5 [ ] [ ] [ ] [ ] [5] [ ] [ ] [ ] [ ]
4 [ ] [ ] [ ] [4] [ ] [ ] [ ] [ ] [ ]
3 [ ] [ ] [3] [ ] [ ] [ ] [ ] [ ] [ ]
2 [ ] [2] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
1 [1] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
經過九個步驟,我們將用數字填充整個陣列。
我們仍然缺少的是屏幕上的結果。爲此,我們應該在每一步中打印整個數組。首先我們應該從左到右打印,然後從開始打印。
而且是些魔術的代碼看起來應該是這樣
public static void pyramide(int levels) {
int[] tab = new int[levels];
for(int row = tab.length; row > 0; row--) {
tab[row-1] = row;
//Print left
for(int i=0; i < tab.length; i++) {
if(tab[i] != 0) {
System.out.print(tab[i]);
} else {
System.out.print(' ');
}
}
//Print right
for(int i= tab.length-2; i >= row - 1; i--) {
if(tab[i] != 0) {
System.out.print(tab[i]);
}
}
System.out.println("");
}
}
你知道三元運算符是如何工作的嗎?如果沒有,請查看它。然後使用if/else重寫代碼,以便更容易理解。提出你的解釋,我們可以爲你檢查。 – thatidiotguy
其他兩個循環處理打印數字。一個用於上升(1,2,3,...)部分,另一個用於下降部分(9,8,...)。 –
如果您仔細考慮,有兩個問題需要解決:一個問題是打印出數字,另一個問題是打印填充(空格)。使用問題分解和獨立解決每個問題,可能會幫助您更好地理解它。一旦你解決了這兩個問題,整合解決方案應該解決你在這裏提出的問題。 – hfontanez