我正在为一个作业制作一个程序,我有一个候选人名单(供选举),我正在练习插入,通过编写一个方法在阵列中找到一个特定的人并直接在它之前插入一个新人。
public static void insertCandidate(Candidate[]list , String find, String candidate, int votes)
{
int location = 0;
for (int i =0; i < list.length; i ++){
String temp = list[i].returnName();
if (temp.equals(candidate)){
location = i;
}
}
for (int index = list.length - 1; index > location; index --){
list[index] = list[index - 1];
}
list[location ] = new Candidate(candidate, votes);
}
}
我遇到的问题是在第一部分,使用for循环。我希望整数位置是所选候选者所在的索引,但由于位置在for循环内设置,因此第二个for循环的值保持为0。结果,我要插入的人被插入列表的最顶部,而不是在我想要的人面前。
我不确定如何解决这个问题,所以请帮助我们。
答案 0 :(得分:1)
这是一段应该有效的代码片段。我在第一个循环上放置了一个标签,当找到位置时,保存位置,然后退出第一个循环:
int location = 0;
label: for (int i =0; i < list.length; i ++){
String temp = list[i].returnName();
if (temp.equals(candidate)){
location = i;
break label;
}
}
答案 1 :(得分:1)
在您检查候选名称的第一个循环中,您可以执行此操作,而不是创建一个全新的对象,因为returnName()
返回一个字符串:
if(list[i].returnName().equals(candidate))
{
location = i;//saves answer
break;//gets out of loop
{
我不明白为什么你会获得相同的位置值,除非你输入完全相同的人并且它们碰巧位于数组的前面。逻辑应该工作,我自己使用相同的代码为我的类找到索引,而不是字符串评估,但相同的逻辑。事实上,我实际上在3周前做了一个非常相似的任务。
另外,如果在列表中找不到,则建议您将location设置为-1,因为列表没有负索引。