这个问题可能看起来令人困惑,但其中的要点是我需要制作一个箭头,比方说,n = 3,这看起来像
*
**
***
**
*
我想在这个三角形上添加一条尾巴,使其成为一个箭头。它必须是长度(n-1)。所以:
*
**
*****
**
*
到目前为止我的代码,只能找到三角形。我似乎无法弄清楚如何让箭头上的尾巴。任何帮助都会很棒,谢谢!
public class Arrow
{
public static void main (String[] args)
{
double n=0;
if (args.length < 1){
System.out.println("Input a number");
System.exit(0); // Terminate the program if user has not input a number
}
else
n = Double.parseDouble(args[0]);
String text = "*";
int n1 = (int) n;
System.out.println(text);
for (int x = 1; x < n1; x++) {
System.out.println(text += "*");
}
for (int i = (n1-1); i>0; i--) {
System.out.println(text = text.substring(0, text.length()-1));
}
} }
答案 0 :(得分:0)
如果用可重用的辅助方法编写重复代码,那么代码就更容易编写。
这称为DRY原则(Don't Repeat Yourself)。
在这种情况下,您希望为箭头打印'*'
的重复字符,并为缩进重复' '
(空格)字符。因此,编写一种创建重复字符String
的方法:
private static String repeat(char ch, int count) {
char[] buf = new char[count];
Arrays.fill(buf, ch);
return new String(buf);
}
现在你已经拥有了,打印右箭头突然变得容易了:
private static void printRightArrow(char ch, int n) {
for (int i = 1; i < n; i++)
System.out.println(repeat(' ', n - 1) + repeat(ch, i));
System.out.println(repeat(ch, n * 2 - 1));
for (int i = n - 1; i >= 1; i--)
System.out.println(repeat(' ', n - 1) + repeat(ch, i));
}
测试和输出
printRightArrow('*', 3);
printRightArrow('#', 7);
*
**
*****
**
*
#
##
###
####
#####
######
#############
######
#####
####
###
##
#
向另一个方向打印箭头非常相似:
private static void printLeftArrow(char ch, int n) {
for (int i = 1; i < n; i++)
System.out.println(repeat(' ', n - i) + repeat(ch, i));
System.out.println(repeat(ch, n * 2 - 1));
for (int i = n - 1; i >= 1; i--)
System.out.println(repeat(' ', n - i) + repeat(ch, i));
}
private static void printUpArrow(char ch, int n) {
for (int i = 1; i <= n; i++)
System.out.println(repeat(' ', n - i) + repeat(ch, i * 2 - 1));
for (int i = 1; i < n; i++)
System.out.println(repeat(' ', n - 1) + ch);
}
private static void printDownArrow(char ch, int n) {
for (int i = 1; i < n; i++)
System.out.println(repeat(' ', n - 1) + ch);
for (int i = n; i >= 1; i--)
System.out.println(repeat(' ', n - i) + repeat(ch, i * 2 - 1));
}
测试和输出
printRightArrow('*', 5);
printLeftArrow('*', 5);
printUpArrow('*', 5);
printDownArrow('*', 5);
*
**
***
****
*********
****
***
**
*
*
**
***
****
*********
****
***
**
*
*
***
*****
*******
*********
*
*
*
*
*
*
*
*
*********
*******
*****
***
*
答案 1 :(得分:0)
这绝对不像Andreas&#39;解决方案,但它很像你的。我刚刚添加了一些for循环和if-else语句。
class Arrow {
public static void main (String[] args) {
double n = 0;
if (args.length < 1){
System.out.println("Input a number");
System.exit(0); // Terminate the program if user has not input a number
}
else
n = Double.parseDouble(args[0]);
String text = "";
int n1 = (int) n;
for (int x = 0; x < n1; x++) {
for (int i = 0; i < n1 - 1; i++) {
if (x != n1 - 1) {
System.out.print(" ");
}
else {
System.out.print("*");
}
}
System.out.println(text += "*");
}
for (int i = (n1-1); i>0; i--) {
for (int j = (n1 - 1); j > 0; j--) {
System.out.print(" ");
}
System.out.println(text = text.substring(0, text.length()-1));
}
}
}