0
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ます。

4

2 に答える 2

1

Java関連のものではなく、純粋なアドホックアルゴリズムのみに対処しているとはいえ、答えるべきではありません。しかし、あなたが使用しているので、あなたはdrjavaJavaの世界で最初の道を歩んでいると思います。手を差し伸べるのは良いことです.

@Keppil が彼のコメントで既に述べたように、実際に特別な処理がない限り (自分自身に会ったことがない)、2 つの承認されたループで同じ反復プリミティブを使用しないでください。インクリメント (デクリメント) すると最初のループ インデックスが失われるためです。内側のループによって。

いくつかのアルゴリズム アプローチもあり、以下のコードのコメントでそれらが明確になることを願っています。

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;
    }
  }
}
于 2014-09-10T20:58:20.373 に答える
0

(linje==start) の場合は星 1、(linje==end) の場合は星 2 を出力します。内側のループの後、linje>hoyde となり、外側のループを終了します。

上記のように、ループ変数に別の名前を付けたい場合があります。

于 2014-09-10T20:08:11.363 に答える