import java.io.File;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
LinkList linkedList = new LinkList();
Scanner scanner = new Scanner(System.in);
System.out.print("Enter input filename: ");
String filename = scanner.nextLine();
File file = new File(filename);
if (!file.exists() || !file.canRead())
{
System.out.println("Error: Cannot open the file.");
System.exit(1);
}
Scanner fileScanner = new Scanner(System.in);
try
{
fileScanner = new Scanner(file);
}
catch (Exception e)
{
System.out.println("Unexpected error opening file.");
System.exit(1);
}
while (fileScanner.hasNextLine())
{
String line = fileScanner.nextLine();
if (line.isEmpty()) continue;
int spaceIndex = line.indexOf(' ');
if (spaceIndex == -1) continue;
String name = line.substring(0, spaceIndex);
String battingRecord = line.substring(spaceIndex + 1);
processPlayer(linkedList, name, battingRecord);
}
fileScanner.close();
displayPlayers(linkedList);
scanner.close();
}
public static void processPlayer(LinkList linkedList, String name, String battingRecord)
{
Node curNode = linkedList.search(name);
if (curNode != null)
{
updateStats(curNode.getPlayer(), battingRecord);
}
else
{
Player newPlayer = new Player(name);
updateStats(newPlayer, battingRecord);
linkedList.insert(newPlayer);
}
}
public static void updateStats(Player player, String battingRecord)
{
char[] characters = battingRecord.toCharArray();
for (int i = 0; i < characters.length; i++)
{
char c = characters[i];
switch (c)
{
case 'H': player.setHits(player.getHits() + 1); break;
case 'O': player.setOuts(player.getOuts() + 1); break;
case 'K': player.setStrikeouts(player.getStrikeouts() + 1); break;
case 'W': player.setWalks(player.getWalks() + 1); break;
case 'P': player.setHbp(player.getHbp() + 1); break;
case 'S': player.setSacrifices(player.getSacrifices() + 1); break;
default:
}
}
}
public static void displayPlayers(LinkList linkedList)
{
Node current = linkedList.getHead();
while (current != null)
{
Player player = current.getPlayer();
int atBats = player.getHits() + player.getOuts() + player.getStrikeouts();
double ba;
if (atBats == 0)
{
ba = 0.0;
}
else
{
ba = (double) player.getHits() / atBats;
}
int plateAppearances = atBats + player.getWalks() + player.getHbp() + player.getSacrifices();
double obp;
if (plateAppearances == 0)
{
obp = 0.0;
}
else
{
obp = (double) (player.getHits() + player.getWalks() + player.getHbp()) / plateAppearances;
}
System.out.printf("%s\t%d\t%d\t%d\t%d\t%d\t%d\t%.3f\t%.3f%n",
player.getName(), atBats, player.getHits(), player.getWalks(),
player.getStrikeouts(), player.getHbp(), player.getSacrifices(), ba, obp);
current = current.getNext();
}
}
}
public class Main { public static void main(String[] args) { LinkList linkedList = new LinkList(); Scanner scanner = new Scanner(System.in);