2011-10-27 30 views
3

嗨,我做我的課程和我一直在考慮的任務是使算法的方形這是使用5×5「*」,但必須結合填寫「」。所以這樣的:Outputing方在Java安慰

***** 
*...* 
*...* 
*...* 
***** 

我已經使用此代碼,我知道它可能非常混亂,因爲我是一個絕對的初學者這個東西。我似乎無法得到「。」在我目前有:

***** 
***** 
***** 
***** 
***** 

這裏是我的代碼:

public static void main(String args[]) 
{ 
    System.out.print ("#size of square"); 
    int stars=BIO.getInt(); 
    int j=1; 
    while(j <= stars) 
    { 
     int starsNumber=1; 
     while (starsNumber<= stars) 
     { 
      int i = 1;      // Display trunk 
      starsNumber=starsNumber+1; 
      System.out.print('*'); 
     } 
     System.out.println(); 

     j= j +1; 
    } 
} 

PS對不起,在編碼那麼糟糕:d和任何幫助,將不勝感激感謝加雷思

+2

您目前沒有可以打印「。」的代碼 – harold

+0

輸出的結果是什麼樣的? – blank

+0

強烈建議您針對您的問題使用更具描述性的標題,例如「輸出一個正方形」 –

回答

3

您是否已經獲得了打印5x5正方形星號的程序?

我強烈建議得到那工作第一。之後,您只需稍作修改就可以在兩者之間打印點。

對於這一點,而不是總是打印一個星號,你需要一個條件。

僞代碼:

if(I'm currently on the edge) 
    Print an asterisk 
else 
    Print a dot 

我要把它留給你找出如何轉化爲真正的代碼這一點。祝你好運!

編輯,提示如何確定,如果你目前所在的邊緣:

  1. 您跟蹤當前行和當前列的(爲了 打印廣場正好5x5的字符)。
  2. 邊緣由第一行和最後一行以及第一列和最後一列組成。
  3. 鑑於提示1提示2,你現在可以決定當你在邊緣,當你不?您需要進行變量比較,所以如果您不熟悉如何比較變量,請閱讀您的教科書。

希望有所幫助。沒有提供確切的答案,我可以說沒有更多。

最後,想想你的解決方案之前編碼它。立即跳入編碼可能是一個障礙,特別是當你是初學者時,不太熟悉這門語言,所以你會陷入語言語法中。在編寫實際代碼之前,可以精心組織您的程序流程,繪製圖片,也許編寫僞代碼。我發現這樣做可以幫助我更容易地編寫代碼並減少出現的錯誤數量。

+0

非常感謝我只是不明白如何或在哪裏做它,但我想這意味着我必須擊中書籍 – gareth

+0

和是的我有一個廣場與***** 5x5 – gareth

+0

好吧,我更新了我的答案,提示。希望這可以幫助。 – Anson

7

指導,而不是一個答案,因爲它的課程...

這聽起來像你需要一個if聲明來決定是否打印*.。當您在第一行或最後一行,或第一列或最後一列時,應打印*

你會發現流量控制更直觀的使用嵌套循環for創建一個正方形,例如

for (int row=0; row<stars; row++) 
{ 
    for (int col=0; col<stars; col++) 
    { 
     // Do your output here 
    } 
} 
+0

由於教學原因,行和列可能應該被啓發,因爲字符在主控臺上打印行主要。因爲它是一個正方形,所以無論如何它都會做任何改變。 – vidstige

+1

@vedstige:好點...我很習慣寫屏幕內存col-then-row是第二性質:-)在示例中更改。 –

0

當任一循環變量都處於其限制值(上限和下限)時,您必須打印*,而在其他情況下則必須打印。使用if語句來控制這個流程。歡呼:)

0

所有這些「使用if聲明」,讓我們現在做一些其他的方式。當然,這不是真正有用的,我只是想挑戰的想法,你必須使用控制流,也許人們絆腳石後這可能會從中學到東西..

首先,這裏是我的代碼用(它的工作原理)

for (int row = 0; row < stars; row++) { 
     for (int col = 0; col < stars; col++) { 
      System.out.print((char)((
        (-col) >> 31 & // encodes the condition: col > 0 
        (-row) >> 31 & 
        (col - (stars - 1)) >> 31 & 
        (row - (stars - 1)) >> 31 & ('*'^'.'))^'*')); 
     } 
     System.out.println(); 
    } 

我用來避免控制流的基本原理是,當負int值右移(有符號偏移),該signbit被複製成是位想出了在「轉移「在左側。結果是x >> 31(其中x是一個int)只有兩個可能的結果,0(如果x是非負的)和-1(如果x是負的)。您可以使用該原則將條件轉換爲位掩碼。你也可以用無符號的移位和否定來完成它,但是你也可以用更短的方式寫出它。其次,我用了​​3210和a^0 = a
因此,當所有條件成立時,'*''*'^'.'進行着色,給出'.',否則'*'用0進行着色,給出'*'

當然,這只是爲了好玩。