2016-10-03 3 views
0

Отнесения я работаю над предназначено для отображения стихов Двенадцать дней Рождества в зависимости от того, что номера вы вводите (1-12).не может выяснить правильное условие во время цикла

В наличии две петли while. Первое - проверить, что введенный номер находится в этом диапазоне. Это прекрасно работает. Второй цикл while использует два оператора switch. Первый помещает правильный суффикс в конец любого числа, которое вы вводите. Второй переключатель определяет, какой подарок связан с днем, а затем он отображает стих следующим образом:

На третий день Рождества мой настоящая любовь дала мне

Три французских кур,

двух горлиц и

куропатки в грушевого дерева

Вот мой, что я сделал до сих пор:

import java.util.Scanner; 

    public class TwelveDays 
     { 
     public static void main (String[] args) 

     { 
     int lastDay = 0; // last day 
     final int MAX = 12; 
     Scanner scan = new Scanner(System.in); 

     //Get the last day and use input validation 

     System.out.println("How many days (1 to 12)? "); 
     lastDay = scan.nextInt(); 


     //Begin 1st while 

     while (lastDay <= 0 || lastDay > MAX) 

     { 
      System.out.println("How many days (1 to 12)? "); 
      lastDay = scan.nextInt(); 
     } 


     int day = 1;  //loop control variable for song verses 


     //Begin 2nd while 

     while () 
      { 
      System.out.print("On the " + lastDay); 



      //Output the suffix for the day 

      String suffix = " "; // temporary suffix value 
      //Begin 1st switch 

      switch(lastDay) 
      { 

        case 1: 
         suffix = ("st"); 
         System.out.print(suffix); 
         break; 
        case 2: 
         suffix = ("nd"); 
         System.out.print(suffix); 
         break; 
        case 3: 
         suffix = ("rd"); 
         System.out.print(suffix); 
         break; 
       default: 
         suffix =("th"); 
         System.out.print(suffix); 
         break; 
      } 



      System.out.println(" day of Christmas my true love gave to me"); 





      //Begin 2nd switch 


       switch(lastDay) 
       { 

       case 1: 
        System.out.println("A partridge in a pear tree."); 
        break; 
       case 2: 
        System.out.println("Two turtle doves, and"); 
        break; 
       case 3: 
        System.out.println("Three French hens,"); 
        break;    
       case 4: 
        System.out.println("Four calling birds"); 
        break; 
       case 5: 
        System.out.println("Five golden rings,"); 
        break; 
       case 6: 
        System.out.println("Six geese a-laying,"); 
       break; 
       case 7: 
        System.out.println("Seven swans a-swimming,"); 
       break; 
       case 8: 
        System.out.println("Eight maids a-milking,"); 
       break; 
       case 9: 
        System.out.println("Nine ladies dancing,"); 
       break; 
       case 10: 
        System.out.println("Ten lords a-leaping,"); 
       break; 
       case 11: 
        System.out.println("Eleven pipers piping,"); 
       break; 
       case 12: 
        System.out.println("Twelve drummers drumming,"); 
       break; 
       } 



    } 
} 
} 

Извините, если мое форматирование бедно. Я новичок в java. Кажется, что независимо от того, какое условие я ставлю для второго, это всегда заканчивается как бесконечный цикл, или он выводит только то количество подарков, которое я ставлю в двенадцать раз.

+0

Вы сами создали бесконечный цикл. –

+0

В вашем втором цикле while нет никакого условия, и вы не можете перерыть в любом месте цикла (кроме тех, что указаны в ваших случаях). Как вы ожидаете, что это закончится? – Zarwan

+0

Пожалуйста, наслаждайтесь некоторыми [дополнительными методами отладки] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/), чтобы помочь вам отладить это. –

ответ

0

Насколько я понимаю ваше требование, первый switch должен находиться вне цикла while, поскольку он необходим только один раз для каждого входа.

Теперь ваша главная проблема в том, что второй цикл while будет итерировать бесконечные времена, так как для него нет условия или инструкции break.

так, что вы можете сделать, это, уменьшаем переменную lastDay в конце второго цикла While и разорвать петлю, когда он равен 0.

следующий код должен помочь:

import java.util.Scanner; 

public class TwelveDays { 
    public static void main(final String[] args) 

    { 
     int lastDay = 0; // last day 
     final int MAX = 12; 
     Scanner scan = new Scanner(System.in); 

     // Get the last day and use input validation 

     System.out.println("How many days (1 to 12)? "); 
     lastDay = scan.nextInt(); 


     // Begin 1st while 

     while (lastDay <= 0 || lastDay > MAX) 

     { 
      System.out.println("How many days (1 to 12)? "); 
      lastDay = scan.nextInt(); 
     } 


     int day = 1; // loop control variable for song verses 

     System.out.print("On the " + lastDay); 


     // Output the suffix for the day 

     String suffix = " "; // temporary suffix value 
     // Begin 1st switch 

     switch (lastDay) { 

     case 1: 
      suffix = ("st"); 
      System.out.print(suffix); 
      break; 
     case 2: 
      suffix = ("nd"); 
      System.out.print(suffix); 
      break; 
     case 3: 
      suffix = ("rd"); 
      System.out.print(suffix); 
      break; 
     default: 
      suffix = ("th"); 
      System.out.print(suffix); 
      break; 
     } 


     System.out.println(" day of Christmas my true love gave to me"); 


     // Begin 2nd while 

     while (true) { 

      // Begin 2nd switch 


      switch (lastDay) { 

      case 1: 
       System.out.println("A partridge in a pear tree."); 
       break; 
      case 2: 
       System.out.println("Two turtle doves, and"); 
       break; 
      case 3: 
       System.out.println("Three French hens,"); 
       break; 
      case 4: 
       System.out.println("Four calling birds"); 
       break; 
      case 5: 
       System.out.println("Five golden rings,"); 
       break; 
      case 6: 
       System.out.println("Six geese a-laying,"); 
       break; 
      case 7: 
       System.out.println("Seven swans a-swimming,"); 
       break; 
      case 8: 
       System.out.println("Eight maids a-milking,"); 
       break; 
      case 9: 
       System.out.println("Nine ladies dancing,"); 
       break; 
      case 10: 
       System.out.println("Ten lords a-leaping,"); 
       break; 
      case 11: 
       System.out.println("Eleven pipers piping,"); 
       break; 
      case 12: 
       System.out.println("Twelve drummers drumming,"); 
       break; 
      } 

      lastDay--; 
      if (lastDay == 0) { 
       break; 
      } 


     } 
    } 
} 

I предложите вам больше узнать о циклах и логике, поскольку я вижу, что вы новичок в программировании. С технической точки зрения, вам не нужен второй цикл while, я попытался свести к минимуму изменения, которые будут внесены в ваш код, и дал ответ.