有没有比我的方式更好的方法呢?

时间:2013-11-28 05:17:43

标签: java for-loop

在面试时我被问到以下问题。我被要求使用*字符进行“填充打印”。这是我提供的代码作为我的答案(在java中):

编辑:

类似这样的内容:用户输入3:

x x x x x
x * * * x
x * * * x
x * * * x 
x x x x x>


public class asterisk {

    public static void main (String args[]){
        int input,ast;
        Scanner scan = new Scanner(System.in);

        System.out.println("Enter number: ");
        input = scan.nextInt();


        if(input>0) {
            topBottom(input);
            for(int x=1; x<=input; x++){
                System.out.print("x ");
                for( ast=1; ast<=input; ast++) {
                    System.out.print("* ");

                }
                System.out.print("x ");
                System.out.println();
            }
            topBottom(input);
        } else {
            System.out.print("x ");
        }    
    }

    public static void topBottom(int input) {           
        for(int top = 1; top<=input+2; top++ ) {
            System.out.print("x ");
        }
        System.out.println();
    }

}

除了我的方式,还有更好的方法来做到这一点吗?另外,我在代码中做得不好?

这对我来说真的很重要。我现在正在练习常见的面试编码问题。

2 个答案:

答案 0 :(得分:1)

您的代码很好,但有一些建议。 按照惯例,方法应该以动词开头。使用topBottom函数是值得怀疑的。我发现它使代码比任何东西都更容易混淆。考虑可读性和效率。

这样的方法更容易阅读,不包括额外的方法。

n + 2行中的n + 2个字符

for(int i=0; i<input+2; i++) {
  for(int j=0; j<input+2; j++) {

始终为第一行和最后一行打印X

    if(i == 0 || i == input+1) {
      System.out.print("X ");
    }

对于所有其他行,请为第一个和最后一个字符打印X,否则请打印*

    else {
      if(j == 0 || j == input+1) {
        System.out.print("X ");
      } else {
        System.out.print("* ");
      }
    }

最终结果:

for(int i=0; i<input+2; i++) {
  for(int j=0; j<input+2; j++) {
    if(i == 0 || i == input+1) {
      System.out.print("X ");
    } else {
      if(j == 0 || j == input+1) {
        System.out.print("X ");
      } else {
        System.out.print("* ");
      }
    }
  }
  System.out.println();
}

答案 1 :(得分:0)

微小的变化,@迈克尔代码,打印下一行并在内循环中打印字符

      //  y = column
      for(int y=0; y < input; y++){     
        //  x = row
        for(int x=0; x< input; x++){
          nextChar = (x == 0 || y == 0 || (x+1) == input 
            || (y+1) == input) ? BORDER : FILLING;
            System.out.print(nextChar);
        }
        System.out.println();
      }