2016-06-28 61 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++) {