簡體   English   中英

做{}while(); 似乎沒有按預期工作

[英]do{}while(); seems not working as expected

嘿伙計們,我最近從 c 搬家,所以我對 Java 沒有深入的了解。 我的問題是,當我運行控制台時,它似乎沒有按照我告訴它的條件工作,但與條件相反。有關其他信息,我使用 eclipse 作為我的 IDE。

完整代碼:

public class kahfi {

static int choice;
static String judul = null ;
static String judulterbit;
static String penulis;
static String jenisbuku;
static String genre;


static int halamannovel ;
static int halamancerpen ;
static int harganovel;
static int hargacerpen;
static int pendapatannovel;
static int pendapatancerpen;


public static void pilihan1(){

    Scanner scanmenu2 = new Scanner(System.in);

    System.out.println("Judul:");
    judul = scanmenu2.next();

    System.out.println("Penulis:[nama mohon disambungkan jika panjang dan terpisah]");
    penulis = scanmenu2.next();

    System.out.println("novel/cerpen? ");
    jenisbuku = scanmenu2.next();

    if(jenisbuku.equals("novel")){ 



     do{
        System.out.println( "jumlah halaman novel[100-300]  :" );
         halamannovel = scanmenu2.nextInt();

     }while(halamannovel >=  100 && halamannovel <= 300 );

    System.out.println("Pilih genre [fiksi,nonfiksi,humor ,dll]: ");
    genre = scanmenu2.next(); 
    System.out.println("data telah tersimpan");
    System.out.println("=========================");

  }else if(jenisbuku.equals("cerpen")){


     do{
        System.out.println("jumlah halaman cerpen[5-30]  :");  
         halamancerpen = scanmenu2.nextInt();

     }while(halamancerpen >= 5 && halamancerpen <= 30 );

    System.out.println("Pilih genre [fiksi,nonfiksi,humor ,dll]: ");
    genre = scanmenu2.next(); 
    System.out.println("data telah tersimpan");
    System.out.println("=========================");


   }else{
       System.out.println("=========================");
      System.out.println("salah input ");
     System.out.println("=========================");
   }

}

public static void pilihan2(){

    System.out.println("Buku yang belum terbit :");
    System.out.println(judul);
    System.out.println("=========================");

    harganovel = halamannovel * 500;
    hargacerpen = halamancerpen * 200;

    System.out.println("harga novel "+(harganovel));
    System.out.println("harga cerpen "+(hargacerpen));
    System.out.println("=========================");

}

public static void pilihan3(){

    judulterbit = new String(judul);

    System.out.println("=========================");
    System.out.println("uang yang di dapatkan : ");
    Random randomno = new Random();

    pendapatannovel = randomno.nextInt(100000) * halamannovel;
    pendapatancerpen = randomno.nextInt(100000) * halamancerpen;

    System.out.println("pendapatan novel : +" + pendapatannovel);
    System.out.println("pendapatan cerpen : +" + pendapatancerpen);
    System.out.println("=========================");

}

public static void pilihan4(){
    System.out.println("=========================");
    System.out.println("buku yang sudah terbit :\n"+(judulterbit));
    System.out.println("=========================");
}


public static void main(String[] args) {


    do{
    System.out.println("Menu\n====");
    System.out.println("1.Menulis buku \n2.Melihat daftar buku yang belum terbit\n3.Menerbitkan buku\n4.Melihat daftar buku yang sudah diterbitkan\n5.Exit.");
    System.out.println("pilihan anda : ");
    Scanner scanmenu = new Scanner(System.in);
    choice = scanmenu.nextInt();

    switch(choice) {


    case 1 :

        pilihan1();

       break;

    case 2 :

        pilihan2();

        break;

    case 3 :

        pilihan3();

       break;
    case 4 :

        pilihan4();

       break;
    case 5  :
        System.exit(0);
        break;

        }
    }while(choice!=5);

    }   

}

問題似乎在這一邊。 我很確定條件是正確的,但是當我在 halamannovel 中輸入“85”時,它會繼續而不是重復,當我輸入 100 時,它會重復。 我試圖改變病情,但它使情況變得更糟。它也適用於halamancerpen。

 do{
        System.out.println( "jumlah halaman novel[100-300]  :" );
         halamannovel = scanmenu2.nextInt();

     }while(halamannovel >=  100 && halamannovel <= 300 );

    System.out.println("Pilih genre [fiksi,nonfiksi,humor ,dll]: ");
    genre = scanmenu2.next(); 
    System.out.println("data telah tersimpan");
    System.out.println("=========================");

  }else if(jenisbuku.equals("cerpen")){


     do{
        System.out.println("jumlah halaman cerpen[5-30]  :");  
         halamancerpen = scanmenu2.nextInt();

     }while(halamancerpen >= 5 && halamancerpen <= 30 );

任何建議或解決方案都將是救命稻草。 感謝您的時間!

僅供參考,我嘗試了 3 種不同的日食。

您在同一個 System.in 流上使用 2 個 Scanner 對象。 相反,您應該重新使用現有的掃描儀,否則它們會相互干擾。 例如,請參見以下內容: 如何在 System.in 上使用多個 Scanner 對象?

當您輸入 85 時,它預計會繼續。

在您的退出標准中,您給出了:

while(halamannovel >=  100 && halamannovel <= 300 );

這意味着 100(包括 100)和 300(包括 300)內的任何數字都會使您的循環重復。 數字范圍是 100-300。

如果輸入 85,則它小於 100,因此while返回false並且循環中斷。

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM