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