在面试时我被问到以下问题。我被要求使用*
字符进行“填充打印”。这是我提供的代码作为我的答案(在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();
}
}
除了我的方式,还有更好的方法来做到这一点吗?另外,我在代码中做得不好?
这对我来说真的很重要。我现在正在练习常见的面试编码问题。
答案 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();
}