如何使用Int索引到String元素

时间:2014-03-11 14:01:03

标签: java collections

你能帮我解决这个问题吗?我不知道如何修复我的代码。我想使用来自集合的binarySearch从IDnumber获取索引然后我将使用该IDnumber的索引从名称中获取元素但我遇到了问题。

我运行时出现了一些错误,但我在NetBeans中看不到任何错误。

以下是整个代码。

public class Attendance {

    public static void main(String[] args){


        List <Integer> IDnumber = Arrays.asList(121,122,123,124,125);
        List <String> Names = Arrays.asList("Victor","Arvin","Marthie","Mariam","Argel");
        System.out.println("Log In");

        System.out.println("Enter your Student number : ");
        Scanner scanner = new Scanner(System.in);

        int StudentNumber = scanner.nextInt(); 

        int x = StudentNumber;
        String s = Names.get(x);

        System.out.println(Collections.binarySearch(IDnumber,x));
        System.out.println(" Student Name : " + s);

    }
}

我可以将Int索引传递给String吗?

6 个答案:

答案 0 :(得分:2)

错误是将StudentNumber分配给x。相反,你应该做

int x = Collections.binarySearch(IDnumber, StudentNumber)

然后您将获得输入数字的学生索引(例如121)。

然后你就像你一样得到学生的名字

String s = Names.get(x);

答案 1 :(得分:1)

我想你想要一张地图:

private static final Map<Integer, String> STUDENTS;
static {
    Map<Integer, String> m = new HashMap<Integer, String>();
    m.put(Integer.valueOf(121), "Victor");
    m.put(Integer.valueOf(122), "Arvin");
    m.put(Integer.valueOf(123), "Marthie");
    m.put(Integer.valueOf(124), "Mariam");
    m.put(Integer.valueOf(125), "Argel");
    STUDENTS = Collections.unmodifiableMap(m);
}

...然后

String s = STUDENTS.get(scanner.nextInt());

答案 2 :(得分:1)

如果用户输入了他们的学号(例如121),那么您正尝试这样做:

String s = Names.get(121);

Names中的索引121处没有值。 Names只有5个元素。你想要做的是在IDnumber列表中查找学号,然后使用该ID的索引作为Names的索引。

尝试类似:

int idIndex = IDnumber.indexOf(x);
String s = Names.get(idIndex);

虽然您可以考虑使用Map来存储名称和ID之间的关系。你在这里做的很大程度上取决于ID和名称的顺序 - 订单的任何转变和你的关系都会丢失。

答案 3 :(得分:0)

您从名称列表中获取值,其中仅包含4的索引。

因此,4之后的值将给出 java.lang.ArrayIndexOutOfBoundsException

答案 4 :(得分:0)

您应该先对Collection进行排序,然后才能对其进行二进制搜索: 使用:

Collections.sort( IDnumber );
System.out.println(Collections.binarySearch(IDnumber,x));

答案 5 :(得分:0)

你可能想要:

int index = Names.indexOf(StudentNumber);

一旦你有了这个,就知道了ID和名字的索引;您不需要进行二进制搜索(这取决于您按顺序排列的ID列表,如果没有则会中断)。 (二进制搜索会更快 - 但除非您的列表巨大,否则收益微不足道。)

或者你真的希望他们输入0,1,2,(等)而不是121,122,123,(等)吗?

顺便说一句。请使用Java约定 - 例如变量应该是驼峰式的(idNumbers,names,thisIsAVariable等)。