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

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

最佳答案

即使它没有解决任何 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;
    }
  }
}

关于java - 循环没有给出想要的结果,卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25774060/

相关文章:

string - 遍历字符串

java - 从txt文件中检索随机单词并且没有输出,并且没有编译器错误java

java - 在eclipse中运行时关闭已经运行的

java - 按索引从 Collection 中获取值(value)的最佳方式

java - 在访问方法中使用相同的 UI 实例

java - 禁止外部休息调用

Java将Arraylist分割成更小的ArrayList

c - 使用 malloc 循环来保证 malloc 的结果不好吗?

javascript - 如何一次执行一个循环语句(jQuery)?

java - 数组的死代码?