如何在一个中创建三个单独的数组并将int存储在其他数组中?

时间:2016-10-22 22:31:33

标签: java arrays

我正在尝试编写一个程序来读取文件“Roster.txt”中的数据并将其本地存储在三个独立的数组中:

  • 一个用于球衣号码,
  • 一个用于玩家名称,
  • 一个位置。

我想单独打印每个数组。

Roster.txt文件格式为:

1 Nathan Clark DB
2 Austin Mancosky RB
4 Drew David QB
7 A.J. Day WR
9 Andrew Thompson QB
11 Nick Holcomb WR
13 Joel Oxton WR
17 Joshua Fischer K
18 Dylan Ulrich DB
22 Michael Garvey LB
23 Josh Neary DB
24 Jalen Clark RB
27 Alexander Villarreal DB
28 Tyler Jenkins RB
31 Peter Krien DB
32 Tevin Anderson RB
35 Zach Kirby P
37 Zach Pierce LB
38 Jacob Zabrowski TE
42 Zach Novotny TE
44 Zach Zillmer LB
51 Jacob Gerzsik LB
52 Eric Bitney LB
53 Aaron Benson LB
57 Zach Sedo LB
58 Alex Prendergast DL
59 Caleb Bryant OL
60 Dan Graf DL
61 Collin Quinn DL
62 Ellis Johnson OL
64 Dylan Bauer OL
69 Eric Graf DL
70 Eric Larson DL
71 Garrett Westerwelle OL
75 Langdon Scott OL
76 Nathan Carpenter OL
80 Samuel Allen WR
84 Dante Marski WR
88 Bryce Neidert TE
97 Sebastian Garcia DL

我目前的代码:

import java.io.File;
import java.util.Scanner;
public class Exercise5 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);

    System.out.println("Enter the file name: ");

    String filename = sc.next();

    File myFile = new File(filename);

    int[] jerseyNumber = new int[39];

    String[] playerName;

    String[] playerPosition;

    int counter = 0;

    while(counter < 39)
    {
        counter++;
    }
 }


public static void printArray(int[] array)
{
for(int i = 0; i < array.length; i++)
{
    System.out.print(array[i] + " ");
}
System.out.println();
}
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我的意思是,你可以这样做,

使用:

List<Integer> playerNumbers = new ArrayList<>();
List<String> playerNames = new ArrayList<>();
List<String> playerPositions = new ArrayList<>();

好的,但实际上并没有这样做。通过创建一个代表每个玩家的课程,你会变得更好(最有可能):

public class Player {
    final Integer number;
    final String name;
    final String position;

    public Player(final Integer number,
                  final String name,
                  final String position) {
        this.number = number;
        this.name = name;
        this.position = position;
    }

    public String getName() {
        return name;
    }

    public Integer getNumber() {
        return number;
    }

    public String getPosition() {
        return position;
    }
}

然后有一系列球员,一个&#34;名单&#34;:

List<Player> roster = new ArrayList<Player>();

然后,当您逐行读取数据时,请创建一个新的播放器:

while (readStuff()) {
    final Integer number = getNumberFromInput();
    final String name = parseNameBlahBlah();
    final String position = obtainPositionBlah();
    roster.add(new Player(number, name, position));
}

如果您确实需要,可以从那里构建列表:

List<String> playerNames =
    roster.stream().map(x -> x.getName()).collect(Collectors.asList());

for (final String playerName : playerNames) {
    System.out.println(playerName + " is on the roster!");
}

下一步是扩展以将String position更改为枚举,并且您还可以直接创建一个Roster类,其具有关于每个位置有多少内部逻辑,检查重复项没有添加等等,因此只需设置一个List<Player>类{/ 1}}

Roster

Roster roster = new Roster(); roster.add(player); 对玩家进行检查以确保将其放入名单中是有意义的。例如,是否已经有提供该号码的玩家?等等。

答案 1 :(得分:1)

正如您所提到的,您想要使用数组。以下是如何做到这一点:

1)首先读取文件并找出文件中的行数,因为它会告诉您有多少数据点,您可以使用它来初始化数组。虽然您可以将数组的大小设置为100或您认为适合数据的任何其他数字。

BufferedReader reader = null;
    int[] jerseyNumber;
    String[] name;
    String[] position;
    int counter = 0;
    try {
        reader = new BufferedReader(new FileReader("file path"));
        String line = reader.readLine();

        while (line != null) {
            counter++;
            line = reader.readLine();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        reader.close();
    }

2)再次读取文件并使用StringTokenizer将字符串分解为标记并将标记存储在数组中。像这样,

jerseyNumber = new int[counter];
    name = new String[counter];
    position = new String[counter];

    try {
        reader = new BufferedReader(new FileReader("file path"));

        String line = reader.readLine();
        counter = 0;
        while (line != null) {
            StringTokenizer string = new StringTokenizer(line, " ");
            jerseyNumber[counter] = Integer.parseInt(string.nextToken());
            name[counter] = string.nextToken() + " " + string.nextToken();
            position[counter] = string.nextToken();
            counter++;
            line = reader.readLine();
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        reader.close();
    }

3)打印出来:

    for (int number : jerseyNumber) {
        System.out.println(number);
    }

    for (String playerName : name) {
        System.out.println(playerName);
    }

    for (String playerPosition : position) {
        System.out.println(playerPosition);
    }

这里的解决方案很乏味,因为你想使用数组。更好的方法是使用list。