我正在尝试创建一个带有两个参数的方法:星数和行长。我希望该方法从行的中间打印星星,然后向外扩展。
星星数必须小于或等于行长,并且行长必须为奇数。
如果我打个电话
rowofStars(3,5);
我想要的输出是:
" *** "
但是如果我打电话
rowofStars(2,5);
rowofStars(4,5);
输出应为:
" * * "
"** **"
引号仅用于显示行的长度(在本例中为5个字符空间)。
我能弄清楚的是,这涉及一个for循环,长度是循环的极限,如果星数==奇数,则
for(int i = 0; i < length; i++){
//Set of rules should be here
if(num % 2 == 1 && i == length % 2 + 1){
System.out.print("*");
} else {
SYstem.out.print(" ");
}
}
但是我无法弄清楚其余规则,以便按照我希望的方式打印星星。
答案 0 :(得分:1)
// 1. Create a character array with the given length:
char[] charArray = new char[length];
// 2. Fill this entire array with spaces initially:
java.util.Arrays.fill(charArray, ' ');
// 3. Fill the middle of the array with the appropriate amount of '*'
// num amount of times for odd, and num+1 amount of times for even
java.util.Arrays.fill(charArray, length/2 - num/2, length/2 + num/2 + 1, '*');
// 4. If the num was even, change the center spot back to a space:
if(num%2 == 0)
charArray[length/2] = ' ';
// 5. Convert the character-array to a String
String result = new String(charArray);
// 6. And output the String:
System.out.println(result);
示例输入:num=4; length=7
[' ',' ',' ',' ',' ',' ',' ']
。[' ','*','*','*','*','*',' ']
† num
是偶数:[' ','*','*',' ','*','*',' ']
" ** ** "
)并打印到STDOUT。†:以下是计算部分的说明:
假设在此示例中,长度为7,但num的范围为0到7。我们将获得以下计算。由于我们正在使用整数,因此/2
将进行整数除,从而隐式地截断十进制值:
inputs calculations indices
0,7 -> (7/2=3)-(0/2=0), (7/2=3)+(0/2=0)+1 -> 3,4
1,7 -> (7/2=3)-(1/2=0), (7/2=3)+(1/2=0)+1 -> 3,4
2,7 -> (7/2=3)-(2/2=1), (7/2=3)+(2/2=1)+1 -> 2,5
3,7 -> (7/2=3)-(3/2=1), (7/2=3)+(3/2=1)+1 -> 2,5
4,7 -> (7/2=3)-(4/2=2), (7/2=3)+(4/2=2)+1 -> 1,6
5,7 -> (7/2=3)-(5/2=2), (7/2=3)+(5/2=2)+1 -> 1,6
6,7 -> (7/2=3)-(6/2=3), (7/2=3)+(6/2=3)+1 -> 0,7
7,7 -> (7/2=3)-(7/2=3), (7/2=3)+(7/2=3)+1 -> 0,7
此结果列表来自Arrays.fill
方法中{* 3}}中的'*'字符所需的索引。
答案 1 :(得分:0)
您可以分步进行
static String rowofStars(int nbStars, int size){
if(nbStars>size) throw new IllegalArgumentException("nbStars>size");
StringBuilder sb = new StringBuilder();
int nbStarsOneSide = nbStars/2;
int nbOneSide = size/2;
for(int i=0; i<(nbOneSide-nbStarsOneSide); i++){
sb.append(" ");
}
for(int i=0; i<nbStarsOneSide; i++){
sb.append("*");
}
String secondSide = new StringBuilder(sb.toString()).reverse().toString();
sb.append(nbStars%2 != 0 ? "*" : " ");
sb.append(secondSide);
return sb.toString();
}