循环没有给出想要的结果,卡住了

时间:2014-09-10 19:59:31

标签: java loops drjava

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应该具有的高度。

2 个答案:

答案 0 :(得分:1)

即使它没有解决任何Ja​​va相关的东西,只有纯粹的特殊算法,但不应该回答。但是因为你正在使用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因此离开外环。

如上所述,您可能希望为循环变量指定不同的名称。