2010-09-23 3 views
0

Так что мне нужно разделить значение массива со значением массива. Я использую float многомерные массивы.Разделить значение массива с значением массива

Вот код:

myNumbers = new float[3, 4]; 
float[] tempNumbers; 

myNumbers[0, 0] = 3; 
myNumbers[0, 1] = -6; 
myNumbers[0, 2] = 3; 
myNumbers[0, 3] = -12; 

/* 
for (int i = 0; i < 4; i++) 
{ 
    myNumbers[0, i] = myNumbers[0, i]/myNumbers[0, 0]; 
} 
*/ 

myNumbers[0, 0] = myNumbers[0, 0]/myNumbers[0, 0]; //Works (strange) 
myNumbers[0, 1] = -6/3; // Works like this 
myNumbers[0, 2] = myNumbers[0, 2]/myNumbers[0, 0]; //Does not 
myNumbers[0, 3] = myNumbers[0, 3]/myNumbers[0, 0]; //Does not 

Выход:

1 // Worked 
-2 // Worked 
3 // Not so much 
-12 // Not so much 

Странно мне, что первое значение вычисляется всегда. Если я попытаюсь разделить статические числа и поместить их в свой массив, он также работает. Пожалуйста, помогите мне с этим. Я отправляю здесь первый раз, надеюсь, вы можете задать вопросы и помочь здесь ... :)

Большое спасибо, глупо меня. :))

ответ

1

Нет, это имеет смысл - к тому времени, когда вы используете myNumbers[0, 0] в третьей и четвертой строках, это значение равно 1 (из-за первого вычисления).

Может быть полезно извлечь массивы из картинки, так как они здесь неактуальны. Ваш код эффективно:

float a = 3; 
float b = -6; 
float c = 3; 
float d = -12; 

a = a/a; 
b = -6/3; 
c = c/a; 
d = d/a; 

После первой линии, a очевидно 1. Если вы не хотите более ранние расчеты влияют на более поздние, использовать отдельные переменные:

float a2 = a/a; 
float b2 = -6/3; 
float c2 = c/a; 
float d2 = d/a; 

На данный момент, c2 будет 1 и d2 будет -4, что, предположительно, вы ожидали.

3

, так как вы обновили первое значение массива уже, это всегда 1, не значит, не дальнейшее разделение с помощью он будет изменять значения чисел myNumbers [0, 2], myNumbers [0, 3]

+0

О, да, глупо меня. Спасибо, парни – sed

0

Когда эта линия выполнена:

myNumbers[0, 0] = myNumbers[0, 0]/myNumbers[0, 0]; //Works (strange) 

Результат сохраняется в myNumbers[0,0]. Поэтому, когда программа выполняет третью строку:

myNumbers[0, 2] = myNumbers[0, 2]/myNumbers[0, 0]; //Does not

Значение myNumbers[0,0] является 1, и правильный результат, 3 генерируется.