2013-05-31 4 views
1

У меня есть трудности с transcripting следующие две функции, написанные в математической нотации в Java коде (вход обеих функций является массивом D элементов):Математические обозначения для программирования кода

enter image description here

Может кто-нибудь взять посмотрите на приведенный ниже код и скажите мне, что с ним что-то не так?

public double firstFunction(double[] arrayOfElements) { 

double sum = 0; 
double sumTwo = 0; 

for(int i = 0; i < arrayOfElements.length; i++) { 
    for(int j = 0; j < i; j++){ 
     sumTwo = sumTwo + arrayOfElements[j]; 
    } 
    sum = sum + Math.pow(sumTwo, 2); 
    } 
    return sum; 
} 

public double secondFunction(double[] arrayOfElements) { 
    double maximum = Math.abs(arrayOfElements[0]); 
    for (int i = 0; i < arrayOfElements.length; i++) { 
     if (Math.abs(arrayOfElements[i]) > maximum) { 
      maximum = Math.abs(arrayOfElements[i]); 
     } 
    } 
    return maximum; 
} 
+1

Какую отладку вы сделали до сих пор? Что такое пример ввода, который дает неверный результат? –

+1

Я не делал отладки, так как не знаю, какого результата ожидать. Я просто спрашиваю, упорядочена ли транскрипция, поскольку я не очень хорошо разбираюсь в математической нотации. Кроме того, у меня нет никаких результатов, которые можно было бы сопоставить с конкретным случаем ввода. – TheAptKid

+1

Я боюсь, что это не очень хорошо подходит для переполнения стека, тогда ... Если у вас нет способа проверить этот код, то я не уверен, что мы сможем помочь вам, кроме определения ошибки при проверке. –

ответ

1

Первый способ должен сбросить sumTwo до нуля на каждой итерации. В настоящее время он накапливает значения от одного выполнения внешнего цикла до следующего. В противном случае все нормально.

В качестве альтернативы, более эффективно, вы могли заметить, что разница между sumTwo одной итерации и следующей будет новым элементом массива. Это означает, что вам не нужен внутренний цикл.

for(int i = 0; i < arrayOfElements.length; i++) { 
    sumTwo = sumTwo + arrayOfElements[j]; 
    sum = sum + Math.pow(sumTwo, 2); 
} 

Второй метод должен возвращать индекс элемента с максимальным абсолютным значением, а не сам элемент. Обратите внимание на субиндекс i в макс.

+0

Благодарим вас за разъяснение. Еще кое-что. Таким образом, функция секунд должна возвращать индекс элемента, который является самым большим, в соответствии с абсолютным значением. Если a имел массив [-1,3, -4], метод должен возвращать 2? – TheAptKid

+0

Да, это правильно. – Joni

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