2013-12-11 21 views
0

Write the following methods:
13. A method named loadScores that will be passed the size of an array, prompt the user to enter the appropriate number of floating point grades, then return the loaded array.Способы вызова с аргументами

Я написал метод, но проблема возникает, когда я пытаюсь это назвать. Вот что у меня есть:

public class ArrayHandout { 
    public static void main(String[] args) { 
    int size = loadScores(size); 
    double[] scoresArray = loadScores(size); 
    } // end main 

    public static double[] loadScores(int size) { 
    Scanner input= new Scanner(System.in); 

    System.out.println("How many scores would you like to enter?"); 
    size = input.nextInt(); 
    double[] scoresArray = new double[size]; 

    int i; 
    for(i = 0; i < scoresArray.length; i++) { 
     System.out.println("Please enter a score:"); 
     scoresArray[i] = input.nextDouble(); 
    }// end for 

    System.out.println(scoresArray[i]); 
    return scoresArray; 
    } // end loadScores 
} // end class 

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

1 error found: File: C:\Users\HiTechRedneck\Desktop\Fall 2013\PlayingwithJava\ArrayHandout.java [line: 6] Error: incompatible types required: int found: double[]

Я знаю, что size потребности быть объявлены в main, потому что раньше я был получив ошибку «не могу найти переменный размер», но я думаю, что тот факт, что я пытаюсь объявить int size, как loadScores(size), отбрасывает его, поскольку объявляемая переменная также является аргументом в методе.

Любая помощь была бы принята с благодарностью.

+2

'int size = loadScores (size);' Это не то, что вы хотите. Разве «размер» не должен быть числом, например 5? – kevinsa5

+0

Но размер зависит от того, что пользователь вводит в метод, поэтому я застреваю. –

+0

Если вы читаете 'size' внутри функции, тогда нет необходимости воспринимать ее как параметр функции - это означает, что вы знаете значение' size' до того, как оно будет прочитано! – kevinsa5

ответ

0

Неверная Ваша строка int size = loadScores(size). loadScores имеет тип возврата double[], поэтому вам необходимо присвоить это возвращаемое значение как таковое.

Просто удалите эту строку и все должно работать должным образом.

0

int size = loadScores(size); вызывает ошибку, так как loadScores возвращает массив типа double.

Поскольку задача просто хочет фрагмент кода, вы могли бы, вероятно, дать размер произвольное значение и передать в Или вы могли бы избавиться от размера в основной и просто передать номер в:.

public static void main(String[] args) { 
    double[] scoresArray = loadScores(5); 
} 

Edit: Также стоит отметить, что оператор print после цикла for будет вызывать исключение ArrayIndexOutOfBoundsException, так как i теперь больше длины массива. Если вы хотите распечатать содержимое scoresArray, вам понадобится другой цикл для прохождения через каждый элемент.

Второе изменение: если вы запрашиваете у пользователя размер, вы должны запустить приглашение для этого в основном методе, а затем передать это loadScores().

0

Вам не нужен размер вообще, прежде чем вызвать функцию, как вы читаете это в функции ваше заявление может быть:

public static double[] loadScores() 

и вызвать

loadScores() 

в основном.Пример:

public class ArrayHandout { 
    public static void main(String[] args) { 
    double[] scoresArray = loadScores(); 
    //do whatever you want here or change declaration of 
    //the function to void and do not return anything 
    } 

    public static double[] loadScores() { 
    Scanner input= new Scanner(System.in); 

    System.out.println("How many scores would you like to enter?"); 
    int size = input.nextInt(); 
    double[] scoresArray = new double[size]; 

    int i; 
    for(i = 0; i < scoresArray.length; i++) { 
     System.out.println("Please enter a score:"); 
     scoresArray[i] = input.nextDouble(); 
    }// end for 

    System.out.println(scoresArray[i]); 
    return scoresArray;  
    } 
} 

если не использовать возвращаемый массив, было бы лучше сделать это следующим образом:

public class ArrayHandout { 
    public static void main(String[] args) { 
    loadScores(); 
    } 

    public static void loadScores() { 
    Scanner input= new Scanner(System.in); 

    System.out.println("How many scores would you like to enter?"); 
    int size = input.nextInt(); 
    double[] scoresArray = new double[size]; 

    int i; 
    for(i = 0; i < scoresArray.length; i++) { 
     System.out.println("Please enter a score:"); 
     scoresArray[i] = input.nextDouble(); 
    }// end for 

    System.out.println(scoresArray[i]); 
    } 
} 

(Если метод не возвращает ничего, вы должны указать его используя ключевое слово void в своей сигнатуре). Также нужна проверка, но я отвечал только на конкретную проблему - без проверки ваша программа все равно будет терпеть неудачу, если будут указаны несовместимые значения.

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