2016-11-28 99 views
0

我需要查看一个数组中的给定变量值何时首次发生,并且一旦发生变化时,就会将该变量更改为数字,并且if它不会发生比将值更改为-1。 例如32在数组中首先出现,所以它应该打印1但100从不出现在数组中,所以它应该打印-1,但是如何在循环中创建第二个if语句,以便该变量为-1,但是它会测试显示它的原始值。对不起,如果我没有解释得好。Java测试变量是否等于数组中的值,如果不打印-1

这里是循环中的代码和第一个if语句

public static int occurrence(int[] a) { 
    Scanner scnr = new Scanner(System.in); 
    int occurrence = scnr.nextInt(); 

    for (int i = 0; i < a.length; i++) 
     if (a[i] == occurrence) 
      occurrence = i + 1; 

    return occurrence; 
+0

没有关注。请显示示例数据和预期输出。 – OldProgrammer

+0

数据只是一堆不同的值,但预期的输出是当您在扫描仪中输入的值首次出现在数组中时的索引,因此如果2是放入扫描仪的值,而不是第一次出现时的值,并且打印说,如果第一次出现作为第五个索引,然后它会打印5,但如果它从未出现,我希望它打印-1,最有可能我认为这将使用第二个if语句。希望有帮助。对不起,没有提供数据,只有很多数字,我希望没有它可以理解。 – blazefire

回答

-1

看看这个。尝试将输入代码(扫描仪)与功能逻辑分开。这将使发生方法可重用。

import java.util.Scanner; 

public class Test { 

    public static void main(String[] args) { 
     int data[] = { 2,5,7}; 
     Scanner scnr = new Scanner(System.in); 
     int inputValue = scnr.nextInt(); 

     int index = occurrence(data, inputValue); 
     System.out.println("value at index: " + index); 
    } 

    // 
    // find first match, then exit the loop if found. 
    // 
    public static int occurrence(int[] a, int inputValue) { 
     int result = -1; 

      for (int i = 0; i < a.length; i++) 
       if (a[i] == inputValue) { 
        result = i; 
        break; 
       } 

      return result; 
    } 

} 
1

JDK库附带一个Arrays类,仅用于这样的事情。

首先,导入类:

import java.util.Arrays; 

现在,所有你需要做的是这样的:

System.out.println(Arrays.binarySearch(a, occurrence)); 

而这基本上它。 “binarySearch()”方法有两个参数,它们是您引用的数组的名称(a),以及您在该数组中搜索的值(出现次数)。然后它返回值的索引。如果在数组中找不到该值,则返回-1。

+0

请注意,'Arrays#binarySearch'需要一个有序的数组才能正常运行。 – Obicere

+0

如果我没有记错的话,还有一个Arrays.sort(数组)方法,它使用气泡排序方法从最不重要的角度排序值。如果该人希望在搜索某个值之前对其数组进行排序,则可以添加: –

+0

...“Arrays.sort(a);”然后搜索出现的值。 (对不起,双后,我不小心按输入键入前面的评论)。 –