【问题标题】:Why doesn't my getIndex method work?为什么我的 getIndex 方法不起作用?
【发布时间】:2014-11-03 16:04:01
【问题描述】:

我编写了一个名为 getIndex 的方法,当我运行测试器时它不会返回数字。

public int getIndex(String s){
    int index = -1;
    for(int i = 0; (i < names.length && index == 1); i++)
    {
        if(names[i].equals(s)) {
            index = i;
        }        
    }
    return index;
}

如果不清楚,我试图让方法返回给定字符串在数组中的哪个位置。

编辑—— [这是我在 ideone 上的代码] (http://ideone.com/CM9xID)

【问题讨论】:

  • for (...; (i &lt; names.length &amp;&amp; index == 1); ......?
  • 为什么你有 && index == 1?

标签: java arrays string indexing


【解决方案1】:

如果比较 index == 1,则循环永远不会开始,因为 index 是用 -1 声明的。如果你用 1 声明你的索引,循环会开始,但如果 names[1] 不等于 s,则循环将无限运行,所以只需删除它就可以了。

public int getIndex(String s){
    for(int i = 0; (i < names.length; i++)
    {
        if(names[i].equals(s)) { //use equalsIgnoreCase if comparing should be case insensitive
            return i; //found
        }        
    }
    return -1; //not found
}

执行循环的另一个版本是(如果您只想要索引,您可以直接使用 indexOf(),如上一个示例所示):

List<String> names2 = new ArrayList<String>(Arrays.asList(names));
for(String name : names2){
    if(name.equals(s))
        return names2.indexOf(name);
}

这是对loop 的增强。

也可以快捷方式直接获取索引:

 List<String> names2 = new ArrayList<String>(Arrays.asList(names));
 return names2.indexOf(s);

Ideone Fiddle

请注意,您始终只能获得第一次出现的索引。如果 s 在数组中不止一次,则必须对其进行增强以存储找到的索引并返回所有索引!

public List<Integer> getIndexes(String s){
    List<Integer> found = new ArrayList<Integer>();
    for(int i = 0; (i < names.length; i++)
    {
        if(names[i].equals(s)) { //use equalsIgnoreCase if comparing should be case insensitive
            found.add(i);
        }        
    }
    return found;
}

【讨论】:

  • 好吧,这似乎更容易一些。我将如何将其放入我的方法中? public int getIndex(String s){ for(String name : names){ if(name.equals(s)) return name.indexOf(s);我不需要另一个 return 语句吗? }
  • 谢谢,这真的很有帮助!
【解决方案2】:

您的循环条件立即为假。

你的代码说:

同时 0 &lt; LENGTH_OF_NAMES AND -1 is equal to 1

-1 从不等于 1,所以你的循环永远不会发生

变化:

for(int i = 0; (i < names.length && index == 1); i++)

收件人:

for(int i = 0; i < names.length; i++)

【讨论】:

  • @gantners 我永远不能 == 1,因为它从 0 开始并且永远不会递增,因为永远无法进入循环,因为索引从 -1 开始,所以它永远不会 == 1。
  • @nem,我已经对我的代码进行了编辑,显示了我在 ideone 上的完整代码
  • @Frightlin 您的编辑不会改变您提出的问题。
猜你喜欢
  • 2021-01-30
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多