字符串排名= playerParts [0]的java.lang.ArrayIndexOutOfBoundsException

时间:2013-09-30 18:49:23

标签: java

我在while循环中的第二个while循环中不断获得java.lang.ArrayIndexOutOfBoundsException。我缺少一步吗?我正在从文件中读取我的信息。该计划的整个目标是让我做以下事情:

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

    格式如下,在具有多个值的行上使用制表符分隔条目: QB< - 职位/角色
    1 A. Rodgers GB< - 价值,名称,团队/创作者
    2 T. Brady NE
    3 D. Brees没有 -----< - 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   );
        }
    
    }
    
    }
    

    感谢您的帮助谢谢!

2 个答案:

答案 0 :(得分:0)

致电

possiblePlayer.split("\t");

你得到的结果不到3个。

你确定这些字段是用标签分隔的吗?

您可以插入以下行来确定实际的内容。

String[] playerParts = possiblePlayer.split("\t");
System.out.println("possiblePlayer: " + possiblePlayer);
System.out.println("num fields: " + playerParts.length);

答案 1 :(得分:0)

这一行:

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

无法按预期工作,因为在某些时候possiblePlayer的标签少于3个(\t

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