2016-11-28 16 views
0

配列の特定の変数値が最初に発生したときに、その変数を最初に発生したときにその変数に変更し、値を-1に変更するよりも発生しません。 たとえば、配列の最初に32が表示されるので、1が出力されますが、100は配列に表示されないので、-1を出力しますが、ループ内に2番目のif文を作成すると、変数は-1になりますが、それを見つけるための元の値が表示されます。申し訳ありませんが十分に説明していない場合。声明Java変数の値が配列の値と等しいかどうかをテストします。-1

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番目のインデックスとして出現した場合は5を出力しますが、出現しなかった場合は-1を出力したい場合は、2番目のif文を使用すると想定します。うまくいけば助けてくれます。データを与えないと申し訳ありませんが、数字がたくさんあります。それがなければそれが理解できることを願っています。 – blazefire

答えて

-1

はこれを見てください場合は、ここ

は、forループのコードと第一です。入力コード(スキャナ)を関数ロジックから分離してみてください。これは、オカレンスメソッドを再利用可能にします。

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)と、その配列(オカレンス)で検索している値の2つのパラメータをとります。次に、値のインデックスを返します。配列に値が見つからない場合は-1を返します。

+0

'Arrays#binarySearch'はソートされた配列が適切に動作することが必要です。 – Obicere

+0

正しく覚えていれば、Arrays.sort(配列)メソッドもあり、バブルソートメソッドを使用して、値が最も大きいものから順に並べ替える方法もあります。人が値を検索する前に配列をソートしたい場合は、次のように追加することができます。 –

+0

... "Arrays.sort(a);"オカレンスの値を検索する前に(二重郵便で申し訳ありませんが、私は間違って前のコメントを入力しながらenterを押しました)。 –

関連する問題