【问题标题】:Finding index of array with given parameter使用给定参数查找数组的索引
【发布时间】:2014-03-07 12:44:30
【问题描述】:

我正在开发一个 java 程序,但我被困在这个特定的部分。该函数假设将一个数组作为输入,并返回输入数组中第一次出现目标的索引,如果没有找到则返回-1。该函数假设调用我的 contains 方法。

包含()

public static boolean contains(int[] input, int target) {
        for(int i = 0; i < input.length; i++){
            if (target == input[i]){

                return true;
            }
        }
        return false;
    }

indexof()

public static int indexOf(int[] input, int target) {
        if(contains(input, target) == true){
            return i;
        }
        return -1;
    }

我正在尝试返回我在 contains 方法中的变量,但我不确定如何使我从 contains 方法转移到 indexof 方法的变量而不使其成为构造函数中的公共 int。感谢您的帮助。

---------编辑---------- contains 方法假设在给定数组中搜索目标值。如果目标值存在于数组中的某处,则返回 true。如果不是,则返回 false。如果需要对 contains 方法进行任何更改,也可以这样做。

【问题讨论】:

  • 你需要使用 contains() 方法吗?这似乎有点多余。
  • 我是这么想的,但这是必要的。
  • 只返回索引,即包含方法中的 i,否则返回 -1。为什么需要索引?
  • 我需要 contains 方法只在目标存在与否的情况下返回,indexOf 方法返回数字的索引是什么。
  • 也许你可以把它作为一个列表来做。见stackoverflow.com/questions/4962361/…

标签: java arrays


【解决方案1】:

唯一有意义的事情是使用 contains() 在 indexOf() 中执行检查,以确保变量存在。

public static boolean contains(int[] input, int target) {
    for(int i = 0; i < input.length; i++){
        if (target == input[i]){
            return true;
        }
    }
    return false;
}

public static int indexOf(int[] input, int target) {

    //If the value isn't there, return -1
    if(contains(input, target) == false){
        return -1;
    }

    //Go find the value if we know it is in there
    for(int i = 0; i < input.length; i++){
        if (target == input[i]){
            return i;
        }
    } 
    //We should never get here
    return -1;   
}

【讨论】:

  • 这是目前唯一有意义的。讲师没有说我们必须如何使用 contains 方法,所以我猜这会很好。谢谢!
  • 不客气。你是对的,循环遍历数组两次没有多大意义。
【解决方案2】:

indexOf 应该看起来很像contains。事实上,它们应该与你所拥有的有所不同:

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

public static boolean contains(int[] input, int target) {
        if(indexOf(input, target) >= 0){
            return true;
        }
        return false;
    }

【讨论】:

  • 我必须将 contains 方法调用到 indexOf 方法。
【解决方案3】:

你很有可能会倒退。要么你的导师在他的作业中有错字,要么你误读或误解了。

contains() 方法使用 indexOf() 方法更有意义。这种方法应该很容易弄清楚。

【讨论】:

  • "通过调用 contains 来构建这个 indexOf() 函数,你已经在上面做了。"我已经给他发了邮件,他没有打错。
【解决方案4】:

另一种方法是设置static 变量等于目标索引。 code 如下图所示:

import java.util.*;
import java.lang.*;
import java.io.*;


class TargetSearch
{
private static int posOfTarget;
public static void main (String[] args) throws java.lang.Exception
{
    int [] arr = {1,2,3,4,5,6};
    int target = 5;
    if(contains(arr,target)){
        System.out.println(target+" found at pos " + getPosOfTarget()+1);
    }
    else
        System.out.println(target+" doesn't exist in arr ");
}

public static boolean contains(int[] input, int target) {
for(int i = 0; i < input.length; i++){
    if (target == input[i]){
        setPosofTarget(i);
        return true;
    }
}
return false;
}

public static int indexOf(int[] input, int target) {
    if(contains(input, target) == true){
        //pos is already set in contains()
        return (getPosOfTarget());
    }
    else
        return -1;   
}

//getter setter of pos
public static int getPosOfTarget(){
    return posOfTarget;
};
public static void setPosofTarget(int i){
    posOfTarget = i;
};

}

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多