2013-02-06 85 views
4

制作一个简单的篮球程序,我要求主队名称,本赛季有多少场比赛,然后在一个循环中请求下一场比赛。基本上,当我开始do-while循环时,除非用户输入例如“Ohio State”,否则它效果很好。例如,输出将从“剩余6场比赛”到“剩余4场比赛”。通常它会问对手?然后减少一场比赛。来自扫描仪的Java循环/用户输入

我该如何解决这样一个2字篮球队名称不会减少两次?

import java.util.Scanner; 

public class Basketball2 { 


public static void main(String[] args) throws java.io.IOException { 
    Scanner scanInput = new Scanner(System.in); 
    String sHomeTeam; 
    String sAwayTeam; 
    int iNumGames; 
    int iGamesLeft = 0; 

    System.out.println("Enter home team's name: "); 
    sHomeTeam = scanInput.nextLine(); 
    System.out.println(sHomeTeam); 

    System.out.println("How many games are in the home team's basketball season?"); 
    iNumGames = scanInput.nextInt(); 
    System.out.println(iNumGames); 

    //start looping 
    do { 
     System.out.println("Enter opponent team's name: "); 
     sAwayTeam = scanInput.next(); 
     System.out.println(sAwayTeam); 
     iGamesLeft = --iNumGames; 
     System.out.println("There are " + iGamesLeft + " games left in the basketball season"); 


    }//end do 
    while(iGamesLeft > 0); 
+3

使用'nextLine()',而不是'下一个()'扫描对手队名时。 – Vulcan

回答

3

Donny Schrimsher给出的答案中提到的是正确的。所有你现在要做的是让在主队的篮球赛季比赛数量即

System.out.println("How many games are in the home team's basketball season?"); 
iNumGames = scanInput.nextInt(); 

后,您必须添加

scanInput.nextLine(); 

这是因为进入你按下的游戏数量后输入密钥(行尾)和nextInt()方法获取游戏数量而不是行尾数。这个行结束被Donny Schrimsher在do-while循环中提到的nextLine()方法所消耗。所以为了避免这种情况,你需要添加一个额外的nextLine()方法。

因此它必须是

System.out.println("How many games are in the home team's basketball season?"); 
iNumGames = scanInput.nextInt(); 
scanInput.nextLine(); 
System.out.println(iNumGames); 

加上由唐尼Schrimsher提到的变化。

谢谢

4

替换:sAwayTeam = scanInput.next();sAwayTeam = scanInput.nextLine();它循环两次是因为scanInput.next();每次只返回一个令牌(例如字)的原因。当您输入两个单词时,由于它已经有另一个单词要返回,因此在继续第二次之前不需要接收来自用户的更多输入。因此,双循环。

编辑:你还需要照顾的代码行,呼吁nextInt()。这与next()方法一样工作,但是,它不是一个标记(单词),而是仅以一个字符作为int扫描。试试这个:在iNumGames = scanInput.nextInt();之后放scanInput.nextLine();这应该清除scanInput中任何让它跳过的东西。注意:由于您的代码被写入的方式,这只会读取一个字符。如果您需要阅读多个字符,则应使用nextLine()并将其值分配给一个整数。

编辑:没有看到@ Rameshwar.S.Soni发表了什么。这是正确的。

+0

当我这样做时,它立即返回“篮球赛季还剩下_场比赛。”没有我输入球队名称。 –

0

请尝试下面的代码与所有退出功能也。

import java.util.Scanner; 

public class Basketball2 { 

    public static void main(String[] args) throws java.io.IOException { 
     Scanner scanInput = new Scanner(System.in); 
     String sHomeTeam; 
     String sAwayTeam; 
     int iNumGames; 
     int iGamesLeft = 0; 

     System.out.println("Enter home team's name: "); 
     sHomeTeam = scanInput.nextLine(); 
     System.out.println(sHomeTeam); 

     System.out 
       .println("How many games are in the home team's basketball season?"); 
     iNumGames = scanInput.nextInt(); 
     System.out.println(iNumGames); 

     // start looping 
     do { 
      System.out.println("Enter opponent team's name: "); 
      scanInput = new Scanner(System.in); 
      sAwayTeam = scanInput.nextLine(); 
      if(!"".equals(sAwayTeam.trim()) && !"exit".equals(sAwayTeam.trim())) 
      { 

       System.out.println(sAwayTeam); 
       iGamesLeft = --iNumGames; 
       System.out.println("There are " + iGamesLeft+ " games left in the basketball season"); 

      } 

     }// end do 
     while (iGamesLeft > 0 && !"exit".equalsIgnoreCase(sAwayTeam)); 
    } 
} 
0

主题:“Java的循环”与扫描仪

我写的是可以正常使用的简单的Java程序,你可以自己尝试...你也可以将此程序很容易地转换成“while循环” ,'do - while loop'和'for - each loop'。

拉菲克, VA,USA, 日期为:2015年4月17日

//Examples: 'for loop' with Scanner 
package com.java_basics; 

import java.util.Scanner; 

public class ForLoop_Examples_With_Scanner 
{ 
    public static void main(String[] args) 
    { 
     //Creating instance of Scanner to allows a user's input to read from System.in 
     Scanner mySC = new Scanner(System.in); 
     System.out.println("Please, enter the value of 'int i' between '0 and 2' : "); 
     int i = mySC.nextInt(); 

     System.out.println("Please, enter the value of 'exitPoint' between '10 and 1000' :"); 
     int exitPoint = mySC.nextInt(); 

     System.out.println("Please, enter the value of 'increment' between '1 and 2' :"); 
     int increment = mySC.nextInt(); 

     mySC.close();//Releasing memory to the OS (Operating System) for reuse 

     System.out.println("Output:\n" + "======"); 
     for(;i<exitPoint ; i=i+increment)//i++==>i=i+1==>i=i+increment 
     { 
      System.out.println(i);   
     } 
    } 
}