调用两次而不是一次键入团队名称

时间:2014-03-01 20:43:38

标签: java methods printing

我被要求检查我在计算机上创建的文本文件中是否存在团队名称。我已经编写了完整的代码,但输出总是在调用团队名称在文件中出现的次数之前两次输入团队名称。请看到这个,并告诉我。感谢。

import java.util.*;
import java.io.*;
public class worldSeries 
{
    public String getName(String teamName)
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println(" Enter the Team Name : " );
        teamName = keyboard.nextLine();
        return teamName;
    }

    public int checkSeries1 () throws IOException
    {
        String teamName="";


        String[] winners = new String[50];
        int  i = 0 ;
        File file = new File ("WorldSeriesWinners.txt");
        Scanner inputFile = new Scanner(file);
        while ( inputFile.hasNext () && i < winners.length )
        {
            winners[i] = inputFile.nextLine(); 
            i++;
        }
        inputFile.close();

        int count = 0;
        String nameOfTeam = getName(teamName);

        for ( int  index = 0 ; index < winners.length ; index ++ )
        {
            if ( nameOfTeam.equals(winners[index]))
            {
                count++;

            }
        }
        return count;

    }

    public static void main(String[]Args)
    {
        String teamName = "";
        worldSeries object1 = new worldSeries();

        try
        {
            System.out.println(" The Number of times " + object1.getName(teamName) + "won the Championship is : " +object1.checkSeries1());
        }
        catch ( IOException ioe )

        {
            System.out.println(" Exception!!! ");

            ioe.printStackTrace();
        }

    }
}

3 个答案:

答案 0 :(得分:1)

计算您拨打getTeamName()的次数 - 您执行两次。所以你看了两次。

更重要的是,WorldSeries类可能内部没有任何Scanner对象或IO。相反,它应该保存WorldSeries信息并具有根据数据检查团队名称的方法。所有用户I / O都应该在main方法中完成(至少在此程序中)。

答案 1 :(得分:1)

您的代码正在执行此操作:

System.out.println(" The Number of times " + object1.getName(teamName) + "won the Championship is : " +object1.checkSeries1());

您的getName方法提示输入名称 - 它正在上面的行中直接调用,并且也被间接调用(在同一行的checkSeries1内)。这意味着它在该行中被调用两次......

您需要重新考虑提示的位置并进行一些重构以解决问题。

答案 2 :(得分:-1)

以下是在Java中执行此操作的方法:

import java.io.*;

public class WorldSeries
{
    /**
     * Count the number of lines a string occurs on in a file.
     */
    public static final void main(String[] argv)
        throws IOException
    {
        if(argv.length<2)
        {
            showUsage();
            System.exit(-1);
        }

        int count=0;
        String term = argv[0];
        String filename = argv[1];

        LineNumberReader reader = new LineNumberReader(
            new FileReader(filename)
            );

        for(String line=reader.readLine(); line != null; line=reader.readLine())
        {
            if(line.indexOf(term) > -1)
            {
                count++;
            }
        }

        System.out.println(count);
    }

    private static final void showUsage()
    {
        System.out.println("Search for term in a file.");
        System.out.println("USAGE: <term> <file-name>");
    }
}

但您也可以使用脚本执行此操作:

grep -c "Boston Red Sox" world-series.txt