你能帮我吗?我不知道如何修复我的代码。我想从集合中使用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条答案
按热度按时间nuypyhwy1#
如果用户输入了他们的学号(比如说,121),您将尝试执行以下操作:
String s = Names.get(121);
在中的索引121处没有值时Names
.Names
只有5个元素长。你要做的是在网上查学生号IDnumber
列表,然后使用该id的索引作为Names
.尝试以下操作:
尽管您可能会考虑使用一个Map来存储名称和id之间的关系,但您在这里所做的工作在很大程度上取决于id和名称的顺序—顺序和关系中的任何变化都会丢失。
jdg4fx2g2#
从只包含索引4的名称列表中获取值。
因此,4之后的值将给出java.lang.arrayindexoutofboundsexception
gv8xihay3#
错误是分配
StudentNumber
至x
. 相反,你应该这样做然后您将得到输入数字的学生索引(例如121)。
然后像你一样得到学生的名字
ncgqoxb04#
你可能想要:
一旦你有了它,你就知道了id和name的索引;您不需要进行二进制搜索(这取决于您的id列表是否保持有序,如果没有,则会中断)(二进制搜索速度会更快,但除非你的列表很大,否则收益是微不足道的。)
或者你真的想让他们输入0,1,2(等等),而不是121,122,123(等等)?
顺便说一句,请使用java约定-例如,变量应采用驼峰大小写(idnumbers、names、thisisaviable等)。
avwztpqn5#
我想你想要张Map:
然后。。。
zdwk9cvp6#
在对集合执行二进制搜索之前,应该对集合进行排序:使用: