2017-01-12 3 views
-2

Эй, ребята, я недавний движок из c, поэтому у меня нет глубоких знаний о java. Моя проблема заключается в том, что когда я запускаю консоль, кажется, что она работает не так, как условие, о котором я говорю, но работает против условия. Для получения дополнительной информации я использую eclipse в качестве моей IDE.do {} while(); похоже, не работает как ожидалось

полный код:

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); 

    } 

} 

проблема, кажется, в этой стороне. Я уверен, что условие правильное, но когда я вводил «85» в halamannovel, он продолжается, а не повторяется, и когда я ввожу 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); 

Любое предложение или решение будет спасателем жизни. Спасибо за ваше время!

FYI Я пробовал в 3 различных затмения.

+6

Просьба представить минимальный проверяемый пример. Нам не нужен весь код. http://stackoverflow.com/help/mcve – marstran

+0

Подсказка: пожалуйста, прочитайте о создании [mcve], а также поймите, что английский язык является основным языком здесь; и что использование не-английской формулировки для идентификаторов и заявлений на печать просто делает менее вероятным получение вами полезной обратной связи. Таким образом: вместо того, чтобы подталкивать всю вашу программу, используйте [mcve] только английские слова. Кроме того: между такими циклами цикла между C и Java нет большой разницы. – GhostCat

+0

Eclipse - это текстовый редактор. Это не имеет никакого значения, как работает код. – JJJ

ответ

0

Ее ожидается, будет продолжаться при входе 85.

В ваших критериях выхода, вы дали:

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

Это означает, что любое число в пределах 100 (100) и 300 (300 включительно) сделают ваш цикл повторяющимся. Диапазон номеров 100-300.

Если вы вводите 85, оно меньше 100, и, таким образом, while возвращает false и перерывы цикла.

Надеюсь, это поможет!

+0

что то, что на самом деле произошло, но я учил, что я делал условие, которое 100-300 можно принять и продолжить, а что-то ниже 100 и выше 300 повторяет цикл. Любое предложение об исправлении состояния? –

+0

Если вы хотите, чтобы число повторило цикл меньше 100 и больше 300, просто измените условие while, например: while (halamannovel <= 100 || halamannovel> = 300); –

+0

Эй, аппмен, ваш ответ был близок к раствору, в котором находилось решение (halamannovel <100 || halamannovel> 300); Большое спасибо! –

0

Вы используете 2 объекта сканера в том же потоке System.in. Вместо этого вы должны повторно использовать существующий сканер, иначе они будут мешать друг другу. Смотри, например, следующее: How to use multiple Scanner objects on System.in?