Java 使用IF语句控制return语句? 公共静态int-seqSearch(int-numRecords,String[]stuName, 双[]stuGpa,字符串nameKey,双gpaKey) for(int i=0;i

Java 使用IF语句控制return语句? 公共静态int-seqSearch(int-numRecords,String[]stuName, 双[]stuGpa,字符串nameKey,双gpaKey) for(int i=0;i,java,if-statement,return-value,Java,If Statement,Return Value,那么,我如何使用if语句来控制它呢?我正在进行顺序搜索,以确定名称是否在数组中找到,如果gpa在数组中,那么它应该返回在(I)中找到的位置。但是,它所做的只是返回-1并打印出没有找到任何字符串。字符串必须与Java中的.equals进行比较,而不是== public static int seqSearch(int numRecords, String[] stuName, double[] stuGpa, String nameKey, double gpaKey)

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

字符串必须与Java中的.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] == nameKey && stuGpa[i] == gpaKey)
              return i;
        return -1;

字符串必须与Java中的.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] == nameKey && stuGpa[i] == gpaKey)
              return i;
        return -1;
你可能想要

if(stuName[i].equals (nameKey) && stuGpa[i] == gpaKey)
你可能想要

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

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

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

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

参见此处的示例
一个基本问题是

if (stuName[i].equals(nameKey) && stuGpa[i].equals(gpaKey))
仅比较对象是否为内存中的同一字符串对象

实际上,您需要使用
nameKey.equals(stuName[i])
来比较实际的字符串值。
您可能想使用
.equalsIgnoreCase
来解决大小写不敏感的问题。

一个基本问题是

if (stuName[i].equals(nameKey) && stuGpa[i].equals(gpaKey))
仅比较对象是否为内存中的同一字符串对象

实际上,您需要使用
nameKey.equals(stuName[i])
来比较实际的字符串值。
您可能想使用
.equalsIgnoreCase
来表示大小写不敏感。

以下内容对于if语句是正确的。stuName[i]是一个字符串,因此与.equals比较。stuGpa[i]是一个双精度的so use==

stuName[i] == nameKey

下面是if语句的正确用法。stuName[i]是一个字符串,因此与.equals进行比较。stuGpa[i]是一个double,因此use==

stuName[i] == nameKey
这里有两个不同的问题:

  • 您应该使用
    equals()
    方法比较字符串(或其近亲之一)-否则您将比较两个字符串是否是相同的引用(实例),而不是等效的字符序列
  • 您应该避免使用
    ==
    比较双打,因为双打的相等性更为微妙。
    查看更多有关原因的信息
  • 请参阅为什么在java中使用
    ==
    进行浮点比较是个坏主意

    除此之外,我还想指出,您的实现假设
    stuame
    stuGpa
    都是相同长度的数组。这可能不太可能……在您开始迭代数组之前,这可能值得一提。

    这里有两个不同的问题:

  • 您应该使用
    equals()
    方法比较字符串(或其近亲之一)-否则您将比较两个字符串是否是相同的引用(实例),而不是等效的字符序列
  • 您应该避免使用
    ==
    比较双打,因为双打的相等性更为微妙。
    查看更多有关原因的信息
  • 请参阅为什么在java中使用
    ==
    进行浮点比较是个坏主意


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

    您的问题不是条件if statement,但条件运算符
    ==
    =
    引用对象的指针值,其中作为
    .equals
    方法返回由对象计算的值

    正如大家之前所说,在下一行中,将您的
    =
    切换到
    .equals

    if(stuName[i].equals(nameKey_ && stuGpa[i] == gpaKey)
    
    公共静态int-seqSearch(int-numRecords,String[]stuName,
    双[]stuGpa,字符串nameKey,双gpaKey)
    for(int i=0;i
    您的问题不是条件if语句,而是条件运算符
    ==
    =
    引用对象的指针值,其中作为
    .equals
    方法返回对象计算的值

    正如大家之前所说,在下一行中,将您的
    =
    切换到
    .equals

    if(stuName[i].equals(nameKey_ && stuGpa[i] == gpaKey)
    
    公共静态int-seqSearch(int-numRecords,String[]stuName,
    双[]stuGpa,字符串nameKey,双gpaKey)
    for(int i=0;i
    要实际回答有关if语句控制的问题

    我相信你们所做的对多个返回语句来说是好的,但

    我个人更喜欢一个入口点和一个出口点作为我的方法。拥有多个出口点总是让我感觉很肮脏

    <>所以,我会考虑下面的代码:< /P>
    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;
    
    公共静态int-seqSearch(int-numRecords,String[]stuName,double[]stuGpa,String-nameKey,double-gpaKey)
    int值=-1;
    对于(int i=0;i