2016-08-20 7 views
0

私は英語が良くないので、タイトルが混乱する可能性があります。切り上げられた配列から最も近い整数を見つける

私は何をしようとしている

:私は結果が欲しいint number = 10;

場合、私はint配列10, 20, 30を持っていると私はnumber変数

に基づいて、それから数値を取りたい

「方法」から20

int number = 21;

結果を30

私はこれを正しく説明する方法がわかりませんが、わかりやすいと思います。


これはなに?私は異なるサイズを持つことができるプレーヤーの在庫を持っています9, 18, 27, 36, 45, 54と私は例えば5のアイテムの内容があります。だから私は在庫サイズ9を持っていると思います。アイテムのコンテンツサイズが19の場合、在庫サイズは27でなく、18である必要があります。それが私の問題です。


私は多くの異なる反復、計算を試みましたが、すべての試みは非常に不成功でした。 配列から最も近い値を取得するこのメソッドはありましたが、切り上げる方法はわかりません。

public int getClosestInteger(int value, int[] numbers) { 
     int distance = Math.abs(numbers[0] - value); 
     int id = 0; 
     for (int i = 1; i < numbers.length; i++){ 
      int dist = Math.abs(numbers[i] - value); 

      if(dist < distance){ 
       id = i; distance = dist; 
      } 
     } 
     return numbers[id]; 
    } 

どうすればいいですか?

+0

'、在庫サイズは27、ではない18であるべきで、それは私のproblem.'だ'として扱われるべきである19' 'ので...あなたの説明ロジックは、その後、意味がありません20 'であり、' 27 'より' 18 'に近い。答えが必要な場合は、論理を明確に明確にする必要があります。 –

+0

意味があります。アイテムのサイズが「19」の場合、**このサイズのインベントリサイズは大きいです。この場合は「27」です。私はmoddingしているゲームのために 'inventory size = 20'を持つことはできません。 '9、18 ...'である必要があります; p teアイテムサイズが19の場合、在庫サイズが '18'であることはお勧めできません。 1つのアイテムが消えます。 – SocketByte

答えて

0

私が正しくあなたの質問を理解していれば、この作業をする必要があります:それは動作するはず

public int getClosestInteger(int value, int[] numbers) { 
    for (int i = 0; i < numbers.length; i++){ 
     if(value < numbers[i]){ 
      return numbers[i]; 
     } 
    } 
} 
+0

ありがとう!できます! ;) – SocketByte

+0

これは、配列 'numbers'が昇順にソートされていることを前提としています。 –

+0

@TimBiegeleisen簡単なArrays.sort(numbers)は残りの部分を行いますが、彼の質問ではソートされた配列のようです。 – Sha7x

0

。アイテムのコンテンツのサイズが19だった場合

for (int i = 0; i < numbers.length; i++){ 
     if(numbers[i] > value){ 
      System.out.println(numbers[i]); 
      break; 
     } 
    } 
+0

ありがとうございます。 :) – SocketByte

関連する問題