我正在尝试编写一个程序,用户可以在其中编写他们的杂货项目列表,然后他们可以搜索他们是否在列表中写了该项目。当他们发现他们是否记下了项目名称时,它假设要返回索引编号,如果他们没有记下项目名称,则假设它返回-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
}
}
答案 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");
}