2016-06-28 62 views
0
import java.util.Scanner ; 
public class printH 
    { 
     public static void main(String[] args) 
     { 
      Scanner in = new Scanner(System.in) ; 
      System.out.print("Please enter the height of H: ") ; 
      int height = in.nextInt() ; 
      System.out.println(); 
      System.out.println(); 
      int heightThird = findThird(height); 
      for (int i = 0; i < heightThird; i++) 
      { 
       printTopAndBottom(heightThird);  
      } 
      for (int j = 0; j<= 1; j++) 
      { 
       printMidH(height, heightThird); 
      } 
      for (int i = 0; i < heightThird; i++) 
      { 
       printTopAndBottom(heightThird);  
      } 
     } 
     public static int findThird(int height3) 
     { 
      if(height3 >= 4) 
      { 
       height3 = (height3 + 2)/3 ; 
      } 
     return height3 ; 
     } 
     public static void printTopAndBottom(int spacingH) 
     { 
      String line = ""; 

     for (int j = 0; j < spacingH; j++) 
     { 
      String currentChar = j % 2 == 0 ? "h" : " "; 
      for (int i = 0; i < spacingH; i++) 
      { 
       line += currentChar; 
      } 
     } 
    System.out.print(line + "\n"); 
    } 
    public static int printMidH(int wide, int finalHeight) 
    { 
     for (int j = 0; j<= 1; j++) 
     { 
      System.out.print("h") ; 
      for(int i = 0; i<= wide; i++) 
      { 
       System.out.print("h") ;  
      } 
     System.out.println(); 
    } 
    return wide ; 
    } 
} 

我的代碼執行以下操作:得到錯誤輸出與某些輸入

1)findThird,給定的4個或更多的字母H的總高度的整數值,它舍入值到最接近3,然後計算並返回一個整數,該整數是圓整高度的三分之一

2)printTopAndBottom,它給出三分之一的圓形高度值打印h的頂部,左邊,中間和右邊的寬度oh的右邊部分,每個都是由firdThird方法確定的H的高度的三分之一。這再次用於打印底部

3),該給定的圓形高度值打印的三分之一H的中間部分一樣寬的圓形高度和一樣高圓角高度的三分之一printMidH

與輸入10其輸出(在我的節目MIDH匹配了頂部和底部的結束只是這裏不是計算器)當我輸入13例如,我得到下面的輸出然而

Please enter the height of H: 10 
hhhh hhhh 
hhhh hhhh 
hhhh hhhh 
hhhh hhhh 
hhhhhhhhhhhh 
hhhhhhhhhhhh 
hhhhhhhhhhhh 
hhhhhhhhhhhh 
hhhh hhhh 
hhhh hhhh 
hhhh hhhh 
hhhh hhhh 

:(這看起來不正確)

hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 
hhhhhhhhhhhhhhh 
hhhhhhhhhhhhhhh 
hhhhhhhhhhhhhhh 
hhhhhhhhhhhhhhh 
hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 
hhhhh  hhhhh  hhhhh 

回答

0

你做錯了什麼:for (int j = 0; j < spacingH; j++)

相反迭代heightThird的,迭代只有三次。

public static void printTopAndBottom(int spacingH) { 
     String line = ""; 

     for (int j = 0; j < 3; j++) { 
      String currentChar = j % 2 == 0 ? "h" : " "; 
      for (int i = 0; i < spacingH; i++) { 
       line += currentChar; 
      } 
     } 
     System.out.print(line + "\n"); 
    } 

即使多了一個變化的printMidH方法:

調用方法heightThird時間:

for (int j = 0; j < heightThird; j++) { 
      printMidH(height, heightThird); 
     } 

和打印 'H' finalHeight*3

public static int printMidH(int wide, int finalHeight) { 

    for (int i = 0; i < finalHeight * 3; i++) { 
     System.out.print("h"); 
    } 
    System.out.println(); 
    return wide; 
} 
0

問題的問候右邊的額外塊位於這些行上你的printTopAndBottom()方法。

for (int j = 0; j < spacingH; j++) 
    String currentChar = j % 2 == 0 ? "h" : " "; 

這是從0到每一行的寬度中的每一個偶數畫出一行「h」。這意味着如果寬度是3,它會輸出'h'的塊。

[0] 1 [2] 
[0][1][2] 
[0] 1 [2] 

但是,如果輸出寬度是5,那麼它會生成你所得到的。

[0] 1 [2] 3 [4] 
[0][1][2] 
[0] 1 [2] 3 [4] 

爲了解決這個問題,僅僅用這個

for (int j = 0; j < 3; j++) 

替換該行

for (int j = 0; j < spacingH; j++) 

一些測試後,它看起來像你的代碼也不當輸出水平線。在printMidH方法,則不應被打印「h」的這條線以上

for(int i = 0; i<= wide; i++) { 

此外,使用變量繪製的1 H的不準確的水平線,作爲真正的寬度已被修改到最接近的3的倍數。用此替換該行。

for (int i = 0; i < finalHeight * 3; i++) {