主要是每行的輸出問題,分別是每行的:空格,數(shù)字(包活從小到大跟從大到?。?,還有沒換行結(jié)尾的換行符,核心是弄清楚每行空格輸出數(shù)量跟行的關(guān)系,已經(jīng)數(shù)字的起始輸出已經(jīng)結(jié)束數(shù)字界定等;
鐘山網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司于2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
核心for循環(huán)如下,本人用UltraEdit 測試,完美通過,完美輸出,類圖片個輸出界面也附下面了
for(n=1;?n=5;?n++)?{??????????//最外層循環(huán)控制輸出的行數(shù),分別是第一到第五行;
for(i=1;?i=5-n;?i++)?{????//這個循環(huán)控制每行前面的空格輸出,如:第一個前面輸出4個空格;
System.out.print("?");
}
for(j=?5-n+1;?j=5;?j++)?{?//?這個循環(huán)控制中間數(shù)字一直到5的輸出,如第一行一個5,第二行為4?5
System.out.print(j);
}
for(k=4;?k5-n;?k--)?{????//這個循環(huán)控制中間數(shù)字5之后的數(shù)字,如第一行不輸出任何,第二行為4
System.out.print(k);
}
System.out.print("\n");????//這個是本行輸出結(jié)束之后輸出一個換行符
}
這是我看到的第三個相同的問題了
先給你講思路吧,首先這是個三角形,用3個FOR循環(huán)打印,一個控制行,一個控制前面的空格,一個控制后面打的東西。
如:
for(){//控制行數(shù)
for(){//控制每行前面的空格
}
for(){//控制每行所打的東西
}
}
例如光打個三角形的,不管里面的數(shù)字,那就這樣:
for(int?hang=0;hang6;hang++){//控制行(hang)
for(int?kongge=0;konggehang;kongge++){//控制前面空格
System.out.print("?");
}
for(int?neirong=6;neironghang;neirong--){//控制內(nèi)容
System.out.print("*");
}
System.out.println();//打印完一行換行
}
第三個FOR循環(huán)里面的neironghang(這個變量可以自己定,表示有對少內(nèi)容,這個是大于行數(shù),由行數(shù)來決定,因為行數(shù)循環(huán)一次增加一次,則內(nèi)容就減少一個)
上面是每打一行,則少一個內(nèi)容,而你的題目是少兩個,你數(shù)數(shù),你的第一行有11個,第二就有9個了。
那就這樣:
int?nr=11;//定義控制內(nèi)容個數(shù)的變量nr
for(int?hang=0;hang6;hang++){//控制行
for(int?kongge=0;konggehang;kongge++){//控制空格
System.out.print("?");
}
for(int?neirong=nr;neirong0;neirong--){//看,內(nèi)容等于nr
System.out.print("*");
}
nr=nr-2;//每循環(huán)完一次,nr減少2;
System.out.println();
}
看到了么第三個for循環(huán)里的neirong0,我寫的是0,也可以的,意思內(nèi)容由nr決定,第一次循環(huán)是11個數(shù)字,結(jié)束后nr-2,下一次循環(huán)就是9個數(shù)字了,以此類推
------------
好了,現(xiàn)在形狀已經(jīng)打印出來了,那就把里面的*改成變化的數(shù)字就可以了。首先你的數(shù)字是先是以3的倍數(shù)增加,然后到中間后,以3的倍數(shù)減少。你數(shù)數(shù),每行都是從最中間開始變的,中間那個數(shù)最大。
那首先我想到的是寫兩個方法,一個乘,一個除。
一下是兩個方法:
public?static?int?cheng(int?num1){
num1=num1*3;
if(num1==0){
num1=1;
}
return?num1;
}
public?static?int?chu(int?num1){
num1=num1/3;
return?num1;
}
現(xiàn)在方法寫了,我們直接帶入進(jìn)去就好了;
我給全部代碼:
public?class?San?{//類名三
public?static?int?cheng(int?num1){//靜態(tài)乘法方法
num1=num1*3;//帶入的參數(shù)乘3
if(num1==0){//判斷如果參數(shù)是0,則直接返回1
num1=1;
}
return?num1;//返回結(jié)果
}
public?static?int?chu(int?num1){//靜態(tài)方法除法
num1=num1/3;//參數(shù)直接除以3
return?num1;//返回結(jié)果
}
public?static?void?main(String[]?args)?{//程序入口main方法
int?nr=11;//定義初始內(nèi)容個數(shù),11個
for(int?hang=0;hang6;hang++){//第一個FOR循環(huán),控制行
int?chushi=0;//上面兩個參數(shù)的初始值0
for(int?kongge=0;konggehang;kongge++){//控制空格
System.out.print("\t");//打印空格
}
for(int?neirong=nr;neirong0;neirong--){//控制內(nèi)容
int?zhongjian=0;//定義最中間的數(shù)
if(nr%2!=0){//內(nèi)容個數(shù)除2有余,則除2+1
zhongjian=nr/2+1;
}else{//內(nèi)容沒有余數(shù),則直接除2
zhongjian=nr/2;
}
if(neirong=zhongjian){//如果內(nèi)容個數(shù)大于中間數(shù),則實(shí)行乘法
System.out.print(cheng(chushi)+"\t");
chushi=cheng(chushi);
}else{//如果內(nèi)容小于中間數(shù),則實(shí)行除法
System.out.print(chu(chushi)+"\t");
chushi=chu(chushi);
}
}
nr=nr-2;//換行,內(nèi)容個數(shù)減少2個
System.out.println();//換行
}
}
}
--------------------------
不知道你明白沒。
上面的中間數(shù)意思是說告訴程序哪里開始遞減。
比如第一行,有11個數(shù)字,到第6個數(shù)的時候停止再乘3,轉(zhuǎn)向除3,
那怎么得到6?那就用11/2,而這樣只能得到5,所以我上面用了判斷,如有有余數(shù)的話,就加上1,那中間數(shù)就得到6了,如果沒余數(shù),就直接除2,第二行就是10/2,得到了5,你看看中間是不是第5個丫。
下面我判斷如果neirong=zhongjian如果內(nèi)容大于中間數(shù)的話,就執(zhí)行乘法,不大于就執(zhí)行除法。
用實(shí)際例子說明:你的例子第一行,有11個數(shù),
那就是
1????3????9????27????81????243????81????27????9????3????1
11??10????9????8?????7?????6????5????4??????3????2????1
6以前的都是執(zhí)行乘法,5以后的都是執(zhí)行的除法餓。
你自己在仔細(xì)看看吧
剛看了這個問題,臨時想的方法,可能不怎么好,但是你也可以看一看。
這個不用遞歸吧,幾個循環(huán)搞定了:
for (int i=1; i=4; i++)
{
for ( int k=1; k=4-i; k++) System.out.print(" ");//輸出前導(dǎo)空格
for ( int j=1; j=i, j++) System.out.print(""+j);//輸出升序數(shù)字
for ( int m=i-1; m=1; m--) System.out.print(""+j);//輸出降序數(shù)字
System.out.print("\n"); //輸出換行符
}
你好,除了直接用多個System.out.println(xxx);直接打印出三角形外,我的代碼最簡單,而且給足了注釋,可以直接運(yùn)行
public class t {
public static void main(String[] args) {
int no=1;//要打印的數(shù)
for(int i=1;no=100;i++){//第1行1個數(shù),第n行n個數(shù),結(jié)束條件是打印的數(shù)=100
for(int j=1;j=i;j++){
System.out.print(no+++"\t");
}
System.out.println();//轉(zhuǎn)行
}
}
}
結(jié)果:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76 77 78
79 80 81 82 83 84 85 86 87 88 89 90 91
92 93 94 95 96 97 98 99 100 101 102 103 104 105