如何返回索引编号

时间:2016-10-17 18:27:38

标签: java arraylist

我正在尝试编写一个程序,用户可以在其中编写他们的杂货项目列表,然后他们可以搜索他们是否在列表中写了该项目。当他们发现他们是否记下了项目名称时,它假设要返回索引编号,如果他们没有记下项目名称,则假设它返回-1。到目前为止,我的代码能够找出他们是否在布尔表达式中记下了该项目。

import java.util.Scanner;
import java.util.Arrays;

public class GroceryStoreTest {
    // for the search item we need to create a method.

I wrote down a boolean method for the search item.

        public static boolean contains(String [] arr, String targetItem){
            for(String find : arr){
                if(targetItem.equals(find))
                    return true;

            }    return false ;
        }

    public static void main(String[] args) {

//lets create an array of string and add items list

        int list;
        Scanner input = new Scanner(System.in);
        System.out.print("How many items would you like to add to the list: ");
        list = input.nextInt();

        String[] items = new String[list];

        System.out.print("Write down the name of item without any space.\n(i.e.; Green Paper = GreenPaper)\n\nItems list: \n");


         int i;
        for (i = 0; i < list; i++) {
            System.out.printf((i+1 ) + ".");
            items[i] = input.next();// asks for next item name

        }

        // search in the items list

        String search = " ";
        System.out.print("Enter the name of the item to check if you have listed: " + search);
        search = input.next();
        //System.out.print(contains(items, String.valueOf(input)));
        System.out.print(contains(items, search));
        input.close();// it will stop taking the input
    }
}

3 个答案:

答案 0 :(得分:1)

其他答案是正确的,但还有另一个观点:你应该理解for-each和&#34; count-for&#34;之间的区别。环路。

你得到了:

public static boolean contains(String [] arr, String targetItem){
  for(String find : arr){
      if(targetItem.equals(find))
        return true;
      }
   return false ;
}

哪个已经很好了。 (也许期待我会建议你总是将块放在{braces}中的微妙之处;因为为了节省一点点打字,它很容易出错。)< / p>

但总的来说,那段代码还可以。实际上应该更喜欢这种循环方式。因为这个构造真的通过让你更少阅读来提高可读性。

但在你的情况下:你需要那个索引。因此for-each循环并不能满足您的需求。因此 - 这是旧学校计数器循环更好的情况:

for (int i=0; i<arr.length;i++) {
... and now i is the index you are looking for; thus the value to return

or -1 in the end if nothing matched

答案 1 :(得分:0)

通过一个循环,将值与添加值相比较,以查看LowCase方法,以避免区分大小写的问题

for(int i = 0 ; i < items.length ; i++) {
    if(targetItem.toLowerCase().equals(items[i].toLowerCase()))
        System.out.println("Index " + i);
}    

或使用ArrayList类可以按如下方式完成

 System.out.println(Arrays.asList(items).indexOf("valueSearch"));

答案 2 :(得分:0)

为什么不改变您的contains方法以返回int

public static int indexOf(String [] arr, String targetItem){
    for(int i = 0 ; i < arr.length ; i++) {
        if(targetItem.equals(arr[i]))
            return i;

    }
    return -1 ;
}

或者,您不需要创建自己的indexOf方法,只需拨打Arrays.asList(items).indexOf("valueSearch")即可获取索引。

另一种方法是使用数组列表而不是数组。 ArrayList基本上是没有固定长度的数组。您的代码将如下所示:

Scanner input = new Scanner(System.in);

ArrayList<String> items = new ArrayList<>();

System.out.print("Write down the name of item without any space.\n(i.e.; Green Paper = GreenPaper)\n\nWrite "END" to finish entering items\n\nItems list: \n");


while(true) {
    String item = input.next();
    if (item.equals("END")) {
        break;
    }
    items.add(item);
}

// search in the items list

String search = " ";
System.out.print("Enter the name of the item to check if you have listed: " + search);
search = input.next();
System.out.print(items.indexOf(search));
input.close();// it will stop taking the input

以下是如何从数组列表中删除所有事物的示例:

ArrayList<String> a = new ArrayList<>();
a.add("Hello");
a.add("Hello");
while (a.contains("Hello")) {
    a.remove("Hello");
}