这个程序可以工作,但我不确定为什么使用arraylist
的方法必须在方法头中包含static
。只是作为背景,程序接受一个文本文件,读取它并将其内容保存到arraylist
(games)中。用户输入文件名和球队名,程序输出特定球队打了多少场比赛,赢了多少场比赛,输了多少场比赛。
它读取的.csv具有以下格式:
ENCE,Vitality,9,16
ENCE,Vitality,16,12
etc..
下面的所有四个方法(一个返回arraylist
,另三个返回int
s),除非我在方法头中输入关键字statice
。如果我只为方法编写public arraylist
或public int
,它们将无法工作。
当arraylist
被传递到方法中时,是否意味着方法头必须始终包含static
?为什么会这样呢?
工作代码如下:
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;
public class SportStatistics {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("File: ");
String file = scan.nextLine();
ArrayList<Game> record = getGame(file); //After method returns the list of
objects, it is copied over to another list.
System.out.println("Team: ");
String team = scan.nextLine();
//These methods return how many games a team played, has won and has lost.
int gamesPlayed = getGamesPlayed(record, team);
int gamesWon = getGamesWon(record, team);
int gamesLost = getGamesLost(record, team);
System.out.println("Games: " + gamesPlayed);
System.out.println("Wins: " + gamesWon);
System.out.println("Losses: " + gamesLost);
}
//This method takes in the file name given by user and saves file details into
a list of objects.
**public static** ArrayList<Game> getGame(String file){
ArrayList<Game> games = new ArrayList<>();
try(Scanner reader = new Scanner(Paths.get(file))){
while(reader.hasNextLine()){
String input = reader.nextLine();
String[] parts = input.split(",");
String homeTeam = parts[0];
String visitingTeam = parts[1];
int homePoints = Integer.valueOf(parts[2]);
int visitingPoints = Integer.valueOf(parts[3]);
games.add(new Game(homeTeam, visitingTeam, homePoints,
visitingPoints));
}
}
catch(Exception e){
System.out.println("Error: File " + file + " not found.");
}
return games;
}
**public static int** getGamesPlayed(ArrayList<Game> record, String team){
int gamesPlayed = 0;
for(Game game: record){
if (game.getHomeTeam().equals(team) ||
game.getVisitngTeam().equals(team)){
gamesPlayed++;
}
}
return gamesPlayed;
}
**public static int** getGamesWon(ArrayList<Game> record, String team){
int gamesWon = 0;
for(Game game: record){
if (game.getHomeTeam().equals(team) ||
game.getVisitngTeam().equals(team)){
if(game.getHomeTeam().equals(team) && game.getHomePoints() >
game.getVisitingPoints()){
gamesWon++;
}
if(game.getVisitngTeam().equals(team) && game.getVisitingPoints() >
game.getHomePoints()){
gamesWon++;
}
}
}
return gamesWon;
}
**public static int** getGamesLost(ArrayList<Game> record, String team){
int gamesLost = 0;
for(Game game: record){
if (game.getHomeTeam().equals(team) ||
game.getVisitngTeam().equals(team)){
if(game.getHomeTeam().equals(team) && game.getHomePoints() <
game.getVisitingPoints()){
gamesLost++;
}
if(game.getVisitngTeam().equals(team) && game.getVisitingPoints() <
game.getHomePoints()){
gamesLost++;
}
}
}
return gamesLost;
}
}
静态只是意味着它不是您从类创建的对象的一部分。它独立于您创建的对象/实例。您可以说它只是与类相关/是类的一部分,而不是一个特性。
错误与参数列表或返回类型无关。您正在静态上下文中使用这些方法(即,您没有在特定实例上调用它们),因此它们必须是static
。
现在我学习Java已经有一段时间了,但有一个概念我很难理解。我习惯了这样的方法 我知道上面的方法会返回一个整数或字符串,无论你想要什么数据类型 现在我在问自己,上述方法的回报类型到底是什么。我如何使用返回的东西做其他事情? 我还看到人们将对象作为这样的参数传递给方法 这又是怎么回事?在什么情况下,上述“风格”是必要的,需要避免什么陷阱? 使用对象而不是整数之类的值让我感到困惑。
我在从事Java项目时遇到了一件非常奇怪的事情。 我在界面中有这个基本方法: 显然,类型参数完全没用,因为它既不用于返回类型也不用于参数。我的IDE也通知了我这一点。 我还有一个扩展注册表的接口: 对于上下文,扩展, 与注册表中的findType(String)冲突;这两种方法具有相同的擦除,但都不重写另一种方法。 我现在的问题是: > 当重写方法想要指定返回值泛型类型时,为什么Java在base
我有一个方法,它检查一个对象是否已经存在于数组列表中,如果存在,则用新对象替换索引,如果不存在,则添加新对象。 当我编写方法时,我没有返回类型。我收到一个错误,建议我将返回类型设置为void,所以我就这样做了。然后我得到了另一个错误,返回类型必须是布尔的。我唯一的问题是方法本身本质上(至少对我来说)不是true/false返回。我需要它做的只是在ArrayList中添加/替换一个对象,而不是返回任
我看过返回IList vs ICollection vs Collection以及它链接的其他问题,但我仍然对这个问题感到困惑。 出于演示目的,我们假设我有一个类,在其中公开了一个公共方法,如下所示: 要遵循CA1002,我的方法应该返回实际的集合类(、等)或它们的接口(、等),如果我希望返回具体?
我注意到,在使用扫描仪时,如果我想设置定界符或区域设置等属性,那么这样做的方法会返回扫描仪对象本身: 我不明白的是,如果属性被更改(而不是创建新对象),为什么它返回一个扫描器对象而不是void?这并不是说我必须将返回值存储在一个变量中——事实上,如果我尝试这样做,就像下面的代码中那样,Eclipse将发出消息:“lineScanner”在此位置未关闭:
下面对getHighest()和getLowest()的调用返回Comparable类型的对象,而不是T类型的对象,这正是我们想要的。为什么,我该如何改进这段代码,使这些调用返回T(这样T的字段和方法就可用了)? 下一行生成编译器错误: 错误:找不到符号符号:方法getName()位置:接口java.lang.Comparable 我想employee.getHighest()返回一个员工(而不仅