import java.util.Scanner;
public class Ve {
public static void main(String[]args){
int hoyde;
int linje = 0;
Scanner tast = new Scanner(System.in);
System.out.println("Hvor hoy skal din V bli?(mellom 2 og 10)");
hoyde = tast.nextInt();
tast.nextLine();
//assert (hoyde <=2 && hoyde >=10) : "hoyde må være mellom 2 og 10";
for(linje= 0; linje < hoyde;linje++) {
int start = linje;
int end = (hoyde-1)*2;
for(linje= 0;linje<=linje;linje++){
if(linje == end){
System.out.println("*");
break;
}
else if(linje == start){
System.out.print("*");
} else{
System.out.print(" ");
}
}
}
}
}
我正在尝试使用V
打印*
。不知何故,当我运行代码时,它会在同一行打印出2颗单颗星。我被困在这一个,我似乎无法找到我应该如何传播给定的信息。我使用Scanner
输入数字V
应该具有的高度。
答案 0 :(得分:1)
即使它没有解决任何Java相关的东西,只有纯粹的特殊算法,但不应该回答。但是因为你正在使用drjava
我认为你是Java世界的第一条道路,所以伸出援助之手会很好。
正如@Keppil在他的评论中已经说过的那样,永远不要在两个认可的循环中使用相同的迭代原语,除非真的有一种特殊的处理方法(我自己从未遇到过),因为当它增加时你会失去第一个循环索引(递减)由内循环。
还有一些算法方法,希望他们在下面的代码中明确注释:
public class FancyVDrawer
{
public static void main(String[] args)
{
int hoyde;
int linje = 0;
Scanner tast = new Scanner(System.in);
System.out.println("Hvor hoy skal din V bli?(mellom 2 og 10)");
hoyde = tast.nextInt();
tast.nextLine();
//assert (hoyde <=2 && hoyde >=10) : "hoyde må være mellom 2 og 10";
++hoyde; //We need hoyde line stars thus should be incremented by one since we cannot draw one star in last line
int end = (hoyde - 1) * 2; // The end should be calculated once, then decremented and not reassigned in each loop iteration
for (linje = 0; linje < hoyde; linje++)
{
int start = linje;
for (int i = 0; i < end; i++)
{
if ((i == start))
{
System.out.print("*");
} else if (i == (end-1))
{
System.out.println("*");
--end; // Decrement the end index once we are going to a new line
}
else
{
System.out.print(" ");
}
}
if(linje == (hoyde - 2)) // Should break to prevent writing the last lonely star
break;
}
}
}
答案 1 :(得分:0)
当(linje == start)时打印星1,当(linje == end)时打印星2。 在内环之后,linje&gt; hoyde因此离开外环。
如上所述,您可能希望为循环变量指定不同的名称。