我的while和if构造有什么问题

时间:2013-11-13 18:22:25

标签: java

计划说明: 该计划包含一个奥林匹克年的清单以及它们发生的地点。假设要求用户输入一年,然后给他们提供位置。

我的任务: 我被要求进行while循环,如果构造在内部,那么如果用户输入错误的奥运年,它告诉用户抱歉,在given_year没有举办奥运会。

我的问题: 如果第一次参加奥运会,该计划将打印年份。我的while循环有什么问题?感谢

以下是代码:

import java.util.* ;

class  Olympics
{
   int     olympic_year  ;
   String  olympic_city ;
   String  olympic_country ;

   public Olympics( int given_olympic_year,  String given_olympic_city,  String given_olympic_country )
   {
      olympic_year    =  given_olympic_year ;
      olympic_city    =  given_olympic_city ;
      olympic_country =  given_olympic_country ;
   }

   public int get_year()
   {
      return  olympic_year ;
   }

   public void print_olympics_data()
   {
      System.out.print( "\n    In "  +  olympic_year  +
              ", Olympic Games were held in " +  olympic_city  +
              ", "  +  olympic_country  +  ".\n" ) ;
   }
}

class  OlympicsDataFinder
{
   public static void main( String[] not_in_use )
   {
      Olympics[]  olympics_table  =
      {
         new Olympics( 1896, "Athens",   "Greece" ),
         new Olympics( 1900, "Paris",    "France" ),
         new Olympics( 1904, "St. Louis", "U.S.A." ),
         new Olympics( 1906, "Athens",   "Greece"  ), 
         new Olympics( 1908, "London",   "Great Britain" ),
         new Olympics( 1912, "Stockholm","Sweden" ),
         new Olympics( 1920, "Antwerp",  "Belgium"   ),
         new Olympics( 1924, "Paris",    "France"    ),
         new Olympics( 1928, "Amsterdam","Netherlands"),
         new Olympics( 1932, "Los Angeles", "U.S.A."),
         new Olympics( 1936, "Berlin",  "Germany"   ),
         new Olympics( 1948, "London",  "Great Britain" ),
         new Olympics( 1952, "Helsinki","Finland"  ),
         new Olympics( 1956, "Melbourne","Australia" ),
         new Olympics( 1960, "Rome",     "Italy"   ),
         new Olympics( 1964, "Tokyo",    "Japan"   ),
         new Olympics( 1968, "Mexico City","Mexico" ),
         new Olympics( 1972, "Munich",   "West Germany" ),
         new Olympics( 1976, "Montreal", "Canada"  ),
         new Olympics( 1980, "Moscow",   "Soviet Union" ),
         new Olympics( 1984, "Los Angeles","U.S.A."),
         new Olympics( 1988, "Seoul",    "South Korea"),
         new Olympics( 1992, "Barcelona","Spain"   ),
         new Olympics( 1996, "Atlanta",  "U.S.A." ),
         new Olympics( 2000, "Sydney",   "Australia" ),
         new Olympics( 2004, "Athens",   "Greece"  ),
         new Olympics( 2008, "Beijing",  "China"   ),
         new Olympics( 2012, "London",   "Great Britain" ),

      } ;


      System.out.print("\n This program can tell where the Olympic "
                     + "\n Games were held in a given year. Give "
                     + "\n a year by using four digits: "  ) ;

      Scanner  keyboard  =  new Scanner( System.in ) ;
      int  given_year  =  keyboard.nextInt() ;

      int  olympics_index  =  0 ;

      boolean table_search_ready  =  false ;

      while ( table_search_ready  ==  false )
      {
         if ( olympics_index < olympics_table.length )
         {
            olympics_table[ olympics_index ].print_olympics_data() ;

            table_search_ready  =  true ;
         }
         else if ( olympics_index >= olympics_table.length )
         {
            System.out.print( "\n    Sorry, no Olympic Games were held in "
                           +  given_year  + ".\n" ) ;

            table_search_ready  =  false ;
         }
         else
         {
            olympics_index  ++  ;
         }
      }
   }
}

3 个答案:

答案 0 :(得分:2)

if (olympics_index < olympics_table.length)始终为true,因为olympics_index在您的while循环开始时等于0。

您可以使用for循环简化程序:

boolean found = false;
for(int i = 0; i < olympics_table.length; i++){
    if(olympics_table[i].get_year() == given_year){
        olympics_table[i].print_olympics_data();
        found = true;
        break; //break the for loop because it has been founded so no need to iterate through the array
    }
}      
if(!found)
    System.out.print( "\n    Sorry, no Olympic Games were held in "+given_year+ ".\n" ) ;

答案 1 :(得分:0)

我相信您正在使用olympic_index检查,而不是使用您扫描的给定年份。尝试使用given_year

检查while循环

答案 2 :(得分:0)

请使用此代码......

public class OlympicsDataFinder {
   public static void main(String[] not_in_use) {
    Olympics[] olympics_table = {
        new Olympics(1896, "Athens", "Greece"),
        new Olympics(1900, "Paris", "France"),
        new Olympics(1904, "St. Louis", "U.S.A."),
        new Olympics(1906, "Athens", "Greece"),
        new Olympics(1908, "London", "Great Britain"),
        new Olympics(1912, "Stockholm", "Sweden"),
        new Olympics(1920, "Antwerp", "Belgium"),
        new Olympics(1924, "Paris", "France"),
        new Olympics(1928, "Amsterdam", "Netherlands"),
        new Olympics(1932, "Los Angeles", "U.S.A."),
        new Olympics(1936, "Berlin", "Germany"),
        new Olympics(1948, "London", "Great Britain"),
        new Olympics(1952, "Helsinki", "Finland"),
        new Olympics(1956, "Melbourne", "Australia"),
        new Olympics(1960, "Rome", "Italy"),
        new Olympics(1964, "Tokyo", "Japan"),
        new Olympics(1968, "Mexico City", "Mexico"),
        new Olympics(1972, "Munich", "West Germany"),
        new Olympics(1976, "Montreal", "Canada"),
        new Olympics(1980, "Moscow", "Soviet Union"),
        new Olympics(1984, "Los Angeles", "U.S.A."),
        new Olympics(1988, "Seoul", "South Korea"),
        new Olympics(1992, "Barcelona", "Spain"),
        new Olympics(1996, "Atlanta", "U.S.A."),
        new Olympics(2000, "Sydney", "Australia"),
        new Olympics(2004, "Athens", "Greece"),
        new Olympics(2008, "Beijing", "China"),
        new Olympics(2012, "London", "Great Britain"),};


    System.out.print("\n This program can tell where the Olympic "
            + "\n Games were held in a given year. Give "
            + "\n a year by using four digits: ");

    Scanner keyboard = new Scanner(System.in);
    int given_year = keyboard.nextInt();

    int olympics_index = 0;

    boolean foundrecord = false;

    while (true) {
        if (olympics_index >= olympics_table.length) {
            break;
        }
        if (olympics_table[olympics_index].get_year() == given_year) {
            olympics_table[ olympics_index].print_olympics_data();
            foundrecord=true;
            break;
        }
        olympics_index++;
    }

    if (!foundrecord) {
        System.out.print("\n Sorry, no Olympic Game was held in "
                + given_year + ".\n");
    }
}
}