1

我的错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at beerregister.BeerRegister.list(BeerRegister.java:66)

我该如何解决?

我的代码有点丑,抱歉。

package beerregister;

import java.util.*;
import beerregister.BeerRegister.NameComparator;

public class BeerRegister{

public String name;
public String style;
public String alc;

List<BeerRegister> bb = new ArrayList<BeerRegister>();

int szamlalo = 0;
//private StyleComparator sc;
//private AlcComparator ac;

public BeerRegister(){

    Scanner sc = new Scanner(System.in);
    String cmd[];
    System.out.println("Lökjed:");
    while(true){
        cmd = sc.nextLine().split(" ");
        if(cmd[0].equals("add")) {add(cmd[1],cmd[2],cmd[3]);}
        if(cmd[0].equals("list")) {list(cmd);}
    }
}
public BeerRegister(String name, String style, String alc){
    this.name=name;
    this.style=style;
    this.alc=alc;
}

public void add(String name,String style,String alc){
    BeerRegister br = new BeerRegister(name, style, alc);
//      br.name = name;
//      br.style = style;
//      br.alc = alc;
    bb.add(br);
}

public void list(String[] cmd){

    System.out.println(bb.size());
    //synchronized(bb){}
    if(cmd[1].equals("name")) 
        Collections.sort(bb,new NameComparator());
    //if(cmd[1].equals("style")) StyleComparator();
    //if(cmd[1].equals("alc")) AlcComparator();

  for(int i = 0; i < bb.size();i++){
    System.out.println(bb.get(i).name+ " "+ bb.get(i).style + " " + bb.get(i).alc);

  }
}

class NameComparator implements Comparator<BeerRegister>{
    @Override
    public int compare(BeerRegister a, BeerRegister b) {
        return a.name.compareToIgnoreCase(b.name);
    }
}
public static void main( String [] args){
    BeerRegister xyz = new BeerRegister();
}
}

那么我该如何解决我的问题呢?请帮忙。

4

4 回答 4

0

你确定你的插入信息正确吗?您需要检查cmd = sc.nextLine().split(" ");是否会使cmd数组具有更大的大小1

 Scanner sc = new Scanner(System.in);
    String cmd[];
    System.out.println("Lökjed:");
    while(true){
        cmd = sc.nextLine().split(" ");

        if(cmd[0].equals("add")) {add(cmd[1],cmd[2],cmd[3]);}
        if(cmd[0].equals("list")) {list(cmd);}

    }
于 2013-10-04T21:17:40.753 回答
0

在 gettimg 索引 3 之前检查 cmd 数组的长度。

于 2013-10-04T21:19:28.407 回答
0

似乎这是错误可能出现的唯一线路......

if(cmd[1].equals("name")) 

请调试一下,看看是什么情况...

可能的原因是 cmd 只是一个简单的list,然后什么都没有...要正确操作计数器,您必须输入list name...

要更正,请在访问其元素之前检查数组的长度

if(cmd.length>2 && cmd[1].equals("name"))  {
    Collections.sort(bb,new NameComparator()); 
}

永远用牙套!!!

(这是主观的:我会坚持使用英文名称...尤其是一半英语一半匈牙利语的人使用起来非常令人沮丧,甚至比使用完全本地化的名称更糟糕。要么szamlaloBeerRegister应该去......)

于 2013-10-04T21:14:38.267 回答
0

要解决您的问题,请在BeerRegister方法中添加一些条件,如下所示:

        if (cmd.length > 3 && cmd[0].equals("add")) {
            add(cmd[1], cmd[2], cmd[3]);
        }else{
            System.out.println("Rewrite CMD Please!");
        }
        if (cmd.length > 1 && cmd[0].equals("list")) {
            list(cmd);
        }
于 2013-10-04T21:19:46.687 回答