【问题标题】:Beginner searching through an array初学者搜索数组
【发布时间】:2017-03-26 09:35:33
【问题描述】:

我需要编写一个方法,当传递一个双精度数组 arr 和一个 int 值 target 时,返回整数部分的第一次出现的项目的索引等于目标。

例如,如果 arr = {1.2, 3.6, 5.2, 9.2, 5.6} 和 target = 5,则目标必须返回 2,如果数组为 null,则返回 -1。

到目前为止我的代码是

public static int yes(double[]arr, int target){
    if (arr == null){
        return -1;
    }

    for (int i= 0; i < arr.length(); i++){
        if(arr[i] == target)
            return i;
    } 

    return 1;
}

还有一个编译错误,我只是不明白 double 和 int 之间的转换?谢谢

【问题讨论】:

  • Double 是十进制数(无论如何都简化了)。整数是整数,向下舍入(截断)。比较是 5.2 与 5 相同不会返回 true。您可以通过执行以下操作将双精度转换为 int:(int) arr[i]
  • 虽然这段代码非常简单,但下次您寻求有关编译器错误的帮助时,您应该提供 (a) 错误消息和 (b) 它出现的行。

标签: java arrays search


【解决方案1】:
for (int i = 0; i < arr.length(); i++) {
    if ((int) arr[i] == target)
        return i;
}

这没关系,但我认为这可能更好。

for (int i = 0; i < arr.length(); i++) {
    if (arr[i] == (double)target)
        return i;
}

【讨论】:

    【解决方案2】:

    下面的代码应该可以工作。它将与目标进行比较的 double 类型转换为 int。因此示例双数组:{1.2, 3.6, 5.2, 9.2, 5.6} 将变为 {1, 3, 5, 9, 5} 并且与目标进行比较时,您将获得正确的返回。如果您在数组中找不到目标,我建议您让函数返回 -1。祝你好运,编码愉快!

    public static int yes(double[]arr, int target){
        if (arr == null){
            return -1;
        }
    
        for (int i= 0; i < arr.length; i++){
            if((int)arr[i] == target) return i;
            //use (int) to cast the double to an int. 3.9 and 3.2 would both become an int of 3
        } 
    
        return 1;
        //returns 1 if target is not in arr
    }
    

    【讨论】:

      【解决方案3】:

      在检查是否等于您的目标时,尝试将您的 arr[i] 转换为 int

      for (int i= 0; i < arr.length; i++){
                  if((int)arr[i] == target)
                      return i;
              }
      

      这样做会删除arry[i] 的小数部分,使其成为整数,从而与您的目标相当。

      【讨论】:

      • 没问题,很高兴我/我们能提供帮助。 :)
      【解决方案4】:

      使用它作为你的 for 循环

      for (int i= 0; i < arr.length(); i++){
              if((int)arr[i] == target)
                   return i;
          }
      

      如果有帮助请点赞!

      【讨论】:

        【解决方案5】:

        你的代码很完美,你只是错过了双重

        (int) arr[i] == target
        
        
        public static int yes(double[]arr, int target){
            if (arr == null){
                return -1;
            }
        
            for (int i= 0; i < arr.length(); i++){
                if((int) arr[i] == target)
                    return i;
            } 
        
            return 1;
        }
        

        【讨论】:

          【解决方案6】:
          public class Main{
              public static void main (String[] args) {
                  double[] arr = new double[]{1.2, 3.6, 5.2, 9.2, 5.6};
                  int target =  31;
                  System.out.println(yes(arr,target));
              }
              public static int yes(double[] arr, int target){
                  if (arr == null){
                      return -1;
                  }
          
                  for (int i= 0; i < arr.length; i++){
                      if((arr[i] - target) >= 0.0 && (arr[i] - target) < 1.0)
                          return i;
                  }
          
                  return -1;
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-06-19
            • 2010-09-28
            • 1970-01-01
            相关资源
            最近更新 更多