如何使用int-index到string元素

wn9m85ua  于 2021-07-09  发布在  Java
关注(0)|答案(6)|浏览(313)

你能帮我吗?我不知道如何修复我的代码。我想从集合中使用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吗?

nuypyhwy

nuypyhwy1#

如果用户输入了他们的学号(比如说,121),您将尝试执行以下操作: String s = Names.get(121); 在中的索引121处没有值时 Names . Names 只有5个元素长。你要做的是在网上查学生号 IDnumber 列表,然后使用该id的索引作为 Names .
尝试以下操作:

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

尽管您可能会考虑使用一个Map来存储名称和id之间的关系,但您在这里所做的工作在很大程度上取决于id和名称的顺序—顺序和关系中的任何变化都会丢失。

jdg4fx2g

jdg4fx2g2#

从只包含索引4的名称列表中获取值。
因此,4之后的值将给出java.lang.arrayindexoutofboundsexception

gv8xihay

gv8xihay3#

错误是分配 StudentNumberx . 相反,你应该这样做

int x = Collections.binarySearch(IDnumber, StudentNumber)

然后您将得到输入数字的学生索引(例如121)。
然后像你一样得到学生的名字

String s = Names.get(x);
ncgqoxb0

ncgqoxb04#

你可能想要:

int index = Names.indexOf(StudentNumber);

一旦你有了它,你就知道了id和name的索引;您不需要进行二进制搜索(这取决于您的id列表是否保持有序,如果没有,则会中断)(二进制搜索速度会更快,但除非你的列表很大,否则收益是微不足道的。)
或者你真的想让他们输入0,1,2(等等),而不是121,122,123(等等)?
顺便说一句,请使用java约定-例如,变量应采用驼峰大小写(idnumbers、names、thisisaviable等)。

avwztpqn

avwztpqn5#

我想你想要张Map:

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());
zdwk9cvp

zdwk9cvp6#

在对集合执行二进制搜索之前,应该对集合进行排序:使用:

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

相关问题