你能帮我解决这个问题吗?我不知道如何修复我的代码。我想使用来自集合的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吗?
答案 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等)。