-1

我一直java.lang.ArrayIndexOutOfBoundsException在 while 循环内的第二个 while 循环中得到一个。我缺少一个步骤吗?我正在从文件中读取我的信息。这个程序的整个目标是让我做以下事情:

  1. 提示用户输入文件路径。
  2. 提示用户知道应该创建多少个团队。
  3. 向用户询问每个团队的名称(如果您愿意,在内部您仍然可以使用团队的数字/索引,但您需要能够在末尾输出带有名称的团队)。
  4. 对于选秀模式,每支球队应按顺序选秀,但轮流轮换顺序应颠倒(即第一个在第一轮选秀的球队是最后一个在第二轮选秀的球队,等等)。
  5. 继续起草,直到 a) 没有更多的玩家/角色或 b) 用户在两轮之间收到提示,如果他们想继续,他们表示“否”(仅 n 就可以了)。
  6. 为球队选择球员/角色
    1. 向用户显示可用人员所处的不同职位/角色,以便可以选择一个(如果需要,您可以使用数字条目来选择他们)。
    2. 一旦用户选择了位置/角色,显示可用的玩家/角色供用户选择
    3. 一旦被选中,玩家/角色就会被添加到相应的团队中
  7. 一旦草稿由于可用选项用尽或用户指示它已完成而结束,请显示以下内容:
    1. 每个团队(团队名称、球员 - 价值、名称和创建者/团队的信息,以及团队总数(即团队中所有人的价值)
    2. 最后,指出哪个团队的总价值最低(即平均而言,拥有“最佳”人员的团队)。

示例文件可在课程资料中找到。

格式如下,在具有多个值的行上使用制表符分隔条目:QB <- Position/role
1 A. Rodgers GB <- Value, Name, Team/Creator
2 T. Brady NE
3 D. Brees NO
---- - <- 5 个连字符表示文件即将切换到新位置/角色 RB <- 下一个位置/角色

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeMap;


public class Superhero {
static TreeMap<String, ArrayList<Player>> positions = new TreeMap<String, ArrayList<Player>>();
ArrayList<String> team = new ArrayList<String>();

public static void main(String[] args) throws IOException {
    int teams = 0;
    String fileName = "";
    Scanner input = new Scanner(System.in);
    System.out.print("Whats the name of the file: ");
    fileName = input.next();
    File superHeroFile = new File(fileName);
    Scanner file = new Scanner(superHeroFile);


    while (file.hasNextLine()){
        //read the position
        String role = file.nextLine();
        // ready to create the ArrayList for all players in this role
        ArrayList<Player> playersInRole = new ArrayList<Player>();
        positions.put(role , playersInRole);

        // until I read "-----" I have a new all players in this current position
        String possiblePlayer = file.next();
        while (!possiblePlayer.equals("-----")){
            String[] playerParts = possiblePlayer.split("\t");
            String ranking = playerParts[0];
            String name = playerParts[1];
            String originalTeam = playerParts[2];

        }
    }


    for(int buildTheTeam = 0; buildTheTeam < teams; buildTheTeam++){
        int playerType = input.nextInt();
        switch (playerType){
        case 1: //Leader
            break;
        case 2: //Brawn
            break;
        case 3: //Gadgets
            break;
        case 4: //Female Influence
            break;
        case 5: //Bad Guy
            break;
        }
    }

    while (file.hasNextLine()){
        String wholeFile = file.nextLine();
        System.out.println(wholeFile);
    }

    //get the number of teams
    System.out.print("How many teams will you have? ");
    teams = input.nextInt();
    input.nextLine();
    for(int teamName = 0; teamName < teams; teamName++){
        System.out.print("What is the name of your team? ");
        String TeamName = input.next();
        System.out.println("Team " + TeamName   );
    }

}

}

我将不胜感激任何帮助谢谢!

4

2 回答 2

0

你打电话时

possiblePlayer.split("\t");

您得到的结果少于 3 个。

你确定这些字段是用制表符分隔的吗?

您可以插入以下行以确定实际发生的情况。

String[] playerParts = possiblePlayer.split("\t");
System.out.println("possiblePlayer: " + possiblePlayer);
System.out.println("num fields: " + playerParts.length);
于 2013-09-30T18:58:20.157 回答
0

这一行:

String[] playerParts = possiblePlayer.split("\t");

没有按您的预期工作,因为在某些时候possiblePlayer有少于 3 个选项卡 ( \t)

您必须playerParts在访问数组之前检查数组是否具有所需数量的元素,用户playerParts.length获取数组的元素数。

于 2013-09-30T19:02:29.937 回答