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

Java 调用以键入两次而不是一次团队名称,java,methods,printing,Java,Methods,Printing,我被要求检查团队名称是否存在于我在计算机上创建的文本文件中。我已经编写了完整的代码,但是输出总是调用我,在计算团队名称出现在文件中的次数之前,请键入两次团队名称。请看这个,让我知道。谢谢 import java.util.*; import java.io.*; public class worldSeries { public String getName(String teamName) { Scanner keyboard = new Scanner(Sy

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

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();
        }

    }
}
import java.util.*;
导入java.io.*;
公共类世界系列
{
公共字符串getName(字符串teamName)
{
扫描仪键盘=新扫描仪(System.in);
System.out.println(“输入团队名称:”);
teamName=keyboard.nextLine();
返回团队名称;
}
public int checkSeries1()引发IOException
{
字符串teamName=“”;
字符串[]winners=新字符串[50];
int i=0;
File File=新文件(“WorldSeriesWinners.txt”);
扫描仪输入文件=新扫描仪(文件);
while(inputFile.hasNext()&&i
计算您调用
getTeamName()
的次数--调用两次。所以你看了两遍


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

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

System.out.println(" The Number of times " + object1.getName(teamName) + "won the Championship is : " +object1.checkSeries1());
您的
getName
方法正在提示输入名称-在上面的一行中直接调用,也间接调用(在同一行的
checkSeries1
内)。这意味着在那一行中它被调用了两次


您需要重新考虑在何处进行提示,并进行一些重构来修复它。

在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>");
    }
}

我不会做两次。当我将它分配给字符串nameOfTeam时,我只看到一次。@user3369285:不要相信我的话,用你的IDE计算你调用它的次数。认真地这个方法也不应该带参数。我的教授希望我在课堂上做,而不是在主方法中。再次计算它们。文字处理器或IDE不会说谎。只需在上面的文件中搜索getName。我只是用我的word find选项做了,它说了三次。当我声明getName()类时,当我分配newName时,当我在main方法中打印它时,为什么要在a下发布一个but?只需在
getName()
方法中放置一个断点,然后查看它何时被调用,并使用调用堆栈(或直接从中退出)查看从何处调用。您能告诉我可以做哪些更改以使其更好吗?一个起点可以是将您的提示放入名为
promptForName
的函数中,并使
getName
更简单?然后您可以调用
getName
,无需重新编程即可调用。1+可获得良好的建议@用户3369285:你真的需要自己思考一下。否则你永远也学不到如何编码。如果你要否决一个在一读这个问题时正确的答案,最好能为你的否决票提供一个解释。
grep -c "Boston Red Sox" world-series.txt