Java循环/通过扫描仪获取用户输入

5

我正在制作一个简单的篮球程序,需要输入主队名称和赛季中比赛总场数,然后在循环中询问下一场比赛的对手。基本上,在开始do-while循环时,它可以正常工作,除非用户输入例如“Ohio State”这样的名称。此时输出将从“剩余6场比赛”变为“剩余4场比赛”,通常它只会询问“对手?”然后减少一场比赛。

如何修复两个单词的篮球队名不会减少两次的问题?

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() 而不是 next() - FThompson
4个回答

4

将代码中的sAwayTeam = scanInput.next();替换为sAwayTeam = scanInput.nextLine();。它循环两次的原因是scanInput.next();每次只返回一个token(例如单词)。当你输入两个单词时,它不需要在第二次继续之前从用户那里接收更多的输入,因为它已经有另一个单词要返回了。因此会出现双重循环。

您还需要注意调用nextInt()的代码行。这与next()方法类似,但是它只扫描一个字符作为int而不是一个token(单词)。尝试在iNumGames = scanInput.nextInt();后面加上scanInput.nextLine();。这应该清除scanInput中任何导致其跳过的内容。注意:由于您的代码编写方式,这将仅读取一个字符。如果您需要读取多个字符,则应使用nextLine()并将其值分配给一个整数。


当我这样做时,它立即返回“篮球赛季中还剩下_场比赛”,而无需我输入球队名称。 - K2SO Ghost Spirit

3

唐尼·施里姆舍所给出的答案是正确的。现在你需要做的就是获取主队篮球赛季比赛数量,即。

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

你需要添加 <\p>。
scanInput.nextLine();

这是因为在输入游戏数量后,您按下回车键(行尾),nextInt()方法会获取游戏数量而不是行尾。这个行尾被nextLine()方法消耗掉了,在do-while循环中Donny Schrimsher提到了这一点。因此,为了避免这种情况,您需要添加一个额外的nextLine()方法。
因此,代码应该是:
System.out.println("How many games are in the home team's basketball season?");
iNumGames = scanInput.nextInt();
scanInput.nextLine();
System.out.println(iNumGames);

还要加上Donny Schrimsher提到的更改。

谢谢


1
尝试使用以下代码并包含所有退出功能。
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

主题:使用Scanner的Java循环

我编写的简单Java程序完美运行,您可以自己尝试……而且您也可以轻松将此程序转换为“while循环”、“do-while循环”和“for-each循环”。

Rafiq, VA,美国, 日期: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);          
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接