使用IF语句来控制return语句?

时间:2011-04-12 20:19:26

标签: java if-statement return-value

public static int seqSearch(int numRecords, String[] stuName,
      double[] stuGpa, String nameKey, double gpaKey)

        for(int i = 0; i < numRecords; i++)
           if(stuName[i] == nameKey && stuGpa[i] == gpaKey)
              return i;
        return -1;

那么,我如何使用if语句来控制它呢?我正在进行顺序搜索以查找是否在数组中找到了名称,如果gpa在数组中,那么它应该返回它在(i)中找到的位置。但是,它所做的只是返回-1并打印出没有找到的。

9 个答案:

答案 0 :(得分:3)

这里有两个单独的问题

  1. 您应该使用equals()方法(或其中一个亲属)比较字符串 - 否则您要比较两个字符串是否是相同的引用(实例)而不是等效的序列字符。
  2. 您应该避免使用==比较双打,因为双打的相等性更加细微。查看this paper以获取有关原因的更多信息。
  3. 请参阅this question了解为什么在java中使用==进行浮点比较是一个坏主意。

    除此之外,我还要提到您的实现假设stuNamestuGpa都是相同长度的数组。这很可能不是这种情况......在开始迭代数组之前,可能需要断言。

答案 1 :(得分:1)

字符串必须与Java中的.equals进行比较,而不是==。

if(stuName[i].equals (nameKey) && stuGpa[i] == gpaKey)

答案 2 :(得分:0)

你可能想要

if (stuName[i].equals(nameKey) && stuGpa[i].equals(gpaKey))

答案 3 :(得分:0)

if(stuName[i] == nameKey不太可能是正确的,您正在比较对象标识而不是字符串内容。试试if(stuName[i].equals(nameKey)

答案 4 :(得分:0)

您正在比较两个字符串。 字符串是不可变的。 请使用“equalsIgnoreCase()”或“equals()”来比较字符串

请参阅此处的示例 http://www.java-samples.com/showtutorial.php?tutorialid=224

答案 5 :(得分:0)

一个基本问题是

stuName[i] == nameKey

仅比较对象在内存中是否是相同的String对象。

您实际上想要使用nameKey.equals(stuName[i])来比较实际的字符串值。 并且您可能希望使用.equalsIgnoreCase来区分大小写。

答案 6 :(得分:0)

以下对于if语句是正确的。 stuName [i]是一个字符串,因此与.equals进行比较。 stuGpa [i]是双重使用==。

if(stuName[i].equals(nameKey_ && stuGpa[i] == gpaKey)

答案 7 :(得分:0)

您的问题不是条件if语句,而是条件运算符====引用对象的指针值,其中.equals方法返回由对象计算的内容。

就像之前所说的人一样,在下一行中将==切换为.equals

public static int seqSearch(int numRecords, String[] stuName,
  double[] stuGpa, String nameKey, double gpaKey)

    for(int i = 0; i < numRecords; i++)
       if(stuName[i].equals(nameKey) && stuGpa[i] == gpaKey)
          return i;
    return -1;

答案 8 :(得分:0)

实际回答有关控制if语句的问题......

我相信你所做的事情对于多个返回语句很好,但是......

我个人更喜欢我的方法的一个入口点和一个出口点。我有多个退出点,总觉得很脏。

所以,我会考虑以下代码:

public static int seqSearch(int numRecords, String[] stuName, double[] stuGpa, String nameKey, double gpaKey)

    int value = -1;

    for(int i = 0; i < numRecords; i++) {  // Don't forget your braces, they aren't required, but wait until you add a newline and forget to add them...
       if(some.boolean().equals(comparison.here())) {
          value = i;
          break;
       }
    }
    return value;
}

最好的运气。