Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组问题_Java_Arrays_Search - Fatal编程技术网

Java数组问题

Java数组问题,java,arrays,search,Java,Arrays,Search,对不起,这里有个愚蠢的问题,我已经在谷歌上搜索过了,但我搜索的任何东西似乎都返回了使用二进制搜索等的方法,但我需要的实际上要简单得多 我有一系列的语言。我正在创建一个扫描仪,请求输入。尝试将其设置为如果用户输入的语言不在数组中,则会显示错误并再次询问。应该很简单,我只是画了一个空白 有人能帮忙吗?这是我到目前为止所拥有的 Scanner scan = new Scanner(System.in); language = scan.next(); while(

对不起,这里有个愚蠢的问题,我已经在谷歌上搜索过了,但我搜索的任何东西似乎都返回了使用二进制搜索等的方法,但我需要的实际上要简单得多

我有一系列的语言。我正在创建一个扫描仪,请求输入。尝试将其设置为如果用户输入的语言不在数组中,则会显示错误并再次询问。应该很简单,我只是画了一个空白

有人能帮忙吗?这是我到目前为止所拥有的

      Scanner scan = new Scanner(System.in);
      language = scan.next();
      while( language NOT IN ARRAY languages) {
       System.out.print("error!");
       language = scan.next();
     }

我现在更明白你的问题了。你肯定应该使用一个新的。但是您需要使用集合的
contains()
方法来检查该语言是否存在

Scanner scan = new Scanner(System.in);
language = scan.next();
while(!set.contains(language)) {
    System.out.print("error!");
    language = scan.next();
}
旧答案,但仍有相关信息:
您要使用的是集合类型。集合不允许重复条目。 从Javadocs:

不包含重复元素的集合

Set Set=newhashset();
//如果集合已包含语言,则不会添加其他项
set.add(语言);

另外,如果您想知道该值是否被拒绝,可以使用add()方法的返回类型。如果项目不存在,则返回true;否则返回false。

您可以执行以下操作:

public static boolean contains(String language, String[] lang_array) {
    for (int i = 0; i < lang_array.length; i++) {
        if (lang_array[i].equals(language))
            return true;
    }

    return false;
}

public static void main(String[] args) {
    String[] lang_array = {"Java", "Python", "Ruby"};
    Scanner scan = new Scanner(System.in);
    String language = scan.next();
    while(!contains(language, lang_array)) {
        System.out.print("error!");
        language = scan.next();
    }
}
公共静态布尔包含(字符串语言,字符串[]lang\u数组){
for(int i=0;i
您可以做两件事:

或者迭代数组,并将每个元素上的内容与每次添加语言时尝试查看的内容进行比较


使用LinkedList或具有
.contains()
方法的其他类型的Java结构,这将在某种程度上执行与我提到的数组类似的操作。

您可以这样做,因为您确实需要使用数组:

   Arrays.sort(languages);
   Scanner scan = new Scanner(System.in);
   language = scan.next();
   while( Arrays.binarySearch(languages, language) < 0) {
    System.out.print("error!");
    language = scan.next();
   }
Arrays.sort(语言);
扫描仪扫描=新扫描仪(System.in);
language=scan.next();
while(Arrays.binarySearch(languages,language)<0){
系统输出打印(“错误!”);
language=scan.next();
}

这甚至不是有效的Java代码……因此问题在于尝试确定某个值是否已经在数组中,即在数组中搜索特定值?我意识到这是它的psuedo代码。指出我说的有效代码在哪里?伯特F-是的,就是它!:)我有一个字符串,由用户输入,然后我搜索数组,看看它是否包含在其中。这是家庭作业吗?是否只需要使用数组操作?使用set的奇怪方式;为什么不直接使用contains()方法呢?这样他就可以积累集合中的所有输入,而这不是他想要的。这几乎是一个完整的答案。我还要指出Set类上的contains(“xyz”)api,它可以用来驱动该循环。这是在(!Arrays.binarySearch(languages,language)<0时发生的吗?既然不能在int上使用not,并且该方法返回int?@user476033谢谢。我修好了。
   Arrays.sort(languages);
   Scanner scan = new Scanner(System.in);
   language = scan.next();
   while( Arrays.binarySearch(languages, language) < 0) {
    System.out.print("error!");
    language = scan.next();
   }