2015-07-22 2 views
0

Прежде всего обратите внимание, что я не мог найти ответ на Google, так что именно поэтому этот вопрос очень простJava установить значение двойной без округления

Так что я пытался сделать Java программы, предполагающей глядя на цвет пикселей в изображении и подключая его к нейронной сети.

Я сделал метод, чтобы попытаться превратить шестнадцатеричный код в вход для нейронной сети. (Это означает, что значения от 0 - 1)

public double[] toHex(int a) 
{ 
    char[] hex = Integer.toHexString(a).toCharArray(); 
    double[] out = new double[6]; 
    for(int i = 2; i < hex.length; i++) 
     switch(hex[i - 2]) 
     { 
      case('0'): 
       out[i - 2] = 0D; 
      case('1'): 
       out[i - 2] = 0.066D; 
      case('2'): 
       out[i - 2] = 0.133D; 
      case('3'): 
       out[i - 2] = 0.2D; 
      case('4'): 
       out[i - 2] = 0.266; 
      case('5'): 
       out[i - 2] = 0.333D; 
      case('6'): 
       out[i - 2] = 0.4D; 
      case('7'): 
       out[i - 2] = 0.466D; 
      case('8'): 
       out[i - 2] = 0.533D; 
      case('9'): 
       out[i - 2] = 0.6D; 
      case('a'): 
       out[i - 2] = 0.666D; 
      case('b'): 
       out[i - 2] = 0.733D; 
      case('c'): 
       out[i - 2] = 0.8D; 
      case('d'): 
       out[i - 2] = 0.866D; 
      case('e'): 
       out[i - 2] = 0.933D; 
      case('f'): 
       out[i - 2] = 1.0D; 
     } 
    return out; 
} 

Но по какой-то причине, делая это всегда приводит либо 1,0 или 0,0, когда я смотрю на сгенерированный код. Может кто-нибудь объяснить, что происходит?

EDIT Извините. Я совершенно глуп. Я смотрел на конкретный раздел, который отображал только 0 и f. Но я все же забыл об этом.

ответ

5

Вам не хватает break s в конце каждого случая. Он должен выглядеть как

switch(hex[i - 2]) 
{ 
    case('0'): 
     out[i - 2] = 0D; 
     break; 
    case('1'): 
     out[i - 2] = 0.066D; 
     break; 
    // ... 
} 

Без них программа проваливается из одного case к другому, каждый из которых перезапись результат последнего. Поскольку последний случай имеет out[i - 2] = 1.0D, это результат, который вы всегда увидите от switch.

+0

Спасибо, я забыл об этом, но это что-то еще. Я вложил это, но он все еще только выводит либо «1.0», либо «0.0». В конце концов, это не имело бы смысла, если бы он сказал hex [i] - 2 == '0', а затем hex [i] - 2 == '1'. –

Смежные вопросы