2013-03-30 2 views
0

Итак, у меня есть эта программа, над которой я работал, для чего требуется использование рекурсивных методов, а номера массивов должны быть массивом, а не массивом ArrayList. Цель программы - разрешить пользователям вводить парные разряды до тех пор, пока они не наберут 0. Двойники должны быть сохранены в массив, и я должен использовать рекурсивные методы для поиска max, числа отрицательных чисел и суммы положительных чисел. Проблема, с которой я сталкиваюсь, заключается в том, когда программа выходит и печатает результаты, которые она печатает max и sum как 0 вместо ответа. Я пробовал все, о чем я мог думать, и не могу заставить его работать. Если бы кто-то мог рассказать мне, в чем моя проблема, это будет оценено ... Спасибо.Возвращаемые числа, но они печатаются как 0

примечание: сначала я помещал max, negative и sum в метод assign9, а также пробовал печатать из основного метода, но ничего не работает.

import java.util.*; 
import java.text.*;; 

public class Assignment9 { 

//main method initializes variables then calls method assignment9 
public static void main(String[] args) 
{ 
    int count = 0; 
    ArrayList<Double> help = new ArrayList<Double>(); 
    double max = 0; 
    int negative = 0; 
    double sum = 0; 
    assignment9(help, count, max, negative, sum); 

}//end main 

//adds user input to array until 0 is entered; it then calls other methods 
public static void assignment9(ArrayList<Double> help, int count, double max, int negative, double sum) 
{ 
    DecimalFormat fmt = new DecimalFormat("#.##"); 
    double input; 

    Scanner scan = new Scanner(System.in); 

    input = scan.nextInt(); 

    if (input == 0) 
    { 
     double[] numbers = new double[count]; 
     for(int i = 0; i < numbers.length; i++) 
     { 
      numbers[i] = help.get(i); 
     } 
     findMax(numbers, count-1, max); 
     countNegative(numbers, count-1, negative); 
     computeSumPositive(numbers, count-1, sum); 

    }else{ 
      help.add(input); 
      count++; 
      assignment9(help, count, max, negative, sum); 
    }//end if 
    System.out.println("The maximum number is " + fmt.format(max)); 
    System.out.println("The total number of negative numbers is " + negative); 
    System.out.println("The sum of positive numbers is " + fmt.format(sum)); 
    System.exit(0); 

}//end assignment9 

//compares elements of array to find the max until count = -1 
public static double findMax(double[] numbers, int count, double max) 
{ 

    if (count == -1) 
    { 
     return max; 
    }else if(numbers[count] > max){ 
     max = numbers[count]; 
     count--; 
     findMax(numbers, count, max); 
    }//end if 
    return max; 

}//end findMax 

public static int countNegative(double[] numbers, int count, int negative) 
{ 

    if(count == -1) 
    { 
     return negative; 
    }else if(numbers[count] < 0){ 
     negative++; 
     count--; 
     countNegative(numbers, count, negative); 
    } 
    return negative; 
}//end countNegative 

public static double computeSumPositive(double[] numbers, int count, double sum) 
{ 
    if(count == -1) 
    { 
     return sum; 
    }else{ 
     sum = sum + numbers[count]; 
     count--; 
     computeSumPositive(numbers, count, sum); 
     return sum; 
    } 
}//end computeSumPositive 

}//end class 
+0

ли «Я попробовал почти все, что я мог думать о» включают в себя использование отладчика? – Axel

+0

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

+0

. Следующее, что вам нужно сделать - даже если ответ tieTYT решает вашу проблему ...; -) Если вы используете eclipse, прочитайте это: http://agile.csc.ncsu.edu/SEMaterials/tutorials/eclipse-debugger/. – Axel

ответ

1

При печати из значений в строке, которая говорит

System.out.println("The maximum number is " + fmt.format(max)); 

Вы никогда не присвоить переменной max к чему-либо в методе assignment9. Конечно, вы можете позвонить findMax, но вы никогда не говорите max = findMax(...). Поскольку вы вызвали его в main, перейдя в 0, это то, что он распечатывает.

Ваша максимальная функция есть какая-то другая ошибка в нем, но это причина, это всегда выдавались 0.

+0

Хорошо, что исправлено большинство моих проблем, но по какой-то причине, когда я добавляю отрицательное число, max достигает 0, но если я добавляю только положительные ответы, он дает правильный ответ. –

+0

Это не дало мне правильного ответа: 'Sandbox.findMax (new double [] {6,2,3,4,5}, 4, 0)' –

+0

Да, иногда это дает правильные ответы, а иногда и неправильные ответы ... i фиксированная сумма положительных целых чисел, чтобы добавить положительные результаты, но я не уверен, что еще не так. Должен ли я сказать max = findMax (...) в методе findMax? И я также получил countNegative для работы. Единственная проблема теперь в том, что max и sum не получают правильных ответов все время –