2016-03-31 2 views
-2

Я пытаюсь сделать программу, которая печатает три введенных вами числа, а затем выводит среднее значение этих чисел. После создания необходимых методов, когда я скомпилировал код, были ошибки при использовании методов с scores. Я не знаю, как я могу ссылаться на scores при вызове mPrint() или average().Как написать метод, который ссылается на объект, вызывающий его?

Когда код скомпилирован, он выдает ошибки в строках, где scores.mPrint(3); и scores.average();. Эти ошибки: The method (способ здесь) is undefined for the type ArrayList<Double>.

Я импортировал: java.util.ArrayList и java.util.Scanner

public class OOPtraining { 

ArrayList<Double> scores = new ArrayList<Double>(); 

public void mPrint(Integer prints) { 

    for (Integer i =0;i<prints; i++) { 
     System.out.println(scores.get(i)); 
    } 

} 

public void average() { 

    double divi = scores.get(0)+scores.get(1)+scores.get(2); 
    System.out.println(divi/3); 

} 

public void main(String[] args) { 

    ArrayList<Double> scores = new ArrayList<Double>(); 

    Scanner reader = new Scanner(System.in); 


    // down here is where I input the scores and then add them to "scores" 
    System.out.println("Enter a score: "); 
    double score1 = reader.nextDouble(); 
    while (true) { 
     System.out.println("Type a double-type number:"); 
     try { 
      score1 = Double.parseDouble(reader.next()); 
      break; 
     } catch (NumberFormatException ignore) { 
      System.out.println("Invalid input"); 
     } 
    } 
    scores.add(score1); 


    System.out.println("Enter another score: "); 
    double score2 = reader.nextDouble(); 
    while (true) { 
     System.out.println("Type a double-type number:"); 
     try { 
      score2 = Double.parseDouble(reader.next()); 
      break; 
     } catch (NumberFormatException ignore) { 
      System.out.println("Invalid input"); 
     } 
    } 
    scores.add(score2); 


    System.out.println("Enter another score: "); 
    double score3 = reader.nextDouble(); 
    while (true) { 
     System.out.println("Type a double-type number:"); 
     try { 
      score3 = Double.parseDouble(reader.next()); 
      break; 
     } catch (NumberFormatException ignore) { 
      System.out.println("Invalid input"); 
     } 
    } 
    scores.add(score3); 
    //here is where I stop adding the scores to "scores" 


    scores.mPrint(3); 
    scores.average(); 


    } 
} 
+4

Что такое get (...)? –

+2

Каким образом это кажется неправильным? –

+0

Пожалуйста, сообщите нам, что вы ожидаете от этого. Это не имеет никакого смысла. –

ответ

4
this.get(i) 

Это будет терпеть неудачу компиляции, потому что класс вы объявили не метод GET. Очень непонятно, что именно вы пытаетесь сделать.

Я вижу, что вы пытаетесь сделать сейчас, вы пытаетесь получить доступ к переменной-члену вашего класса, «это» относится к классу, который вы используете в OOPTraining. То, что вы пытаетесь сделать, это получить доступ к массивам ArrayList. Для того, чтобы вы могли делать это, вам нужно будет быть переменной класса, а не локальной переменной в вашем основном методе. Посмотрите на это, и это должно вас начать.

+0

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

1

Должен быть какой-то метод с именем get() в том же классе, где вы пытаетесь вызвать this.get (int) Иначе это не сработает. Я думаю, что вы работаете со списком, и забыли его продлить.

+0

Недавно я практиковал методы, ArrayLists и HashMaps на Codecademy, и я не совсем уверен, как использовать это «,», поскольку я не был полностью ею подвержен. –

0

this относится к определенному экземпляру вашего класса OOPtraining. this.get(0) вызывает метод get() на вашем классе OOPtraining и передает 0 как первый и единственный аргумент этого метода.

Проблема в том, что ваш класс OOPtrainingне имеет a get() метод. Вам нужно либо добавить метод get() в OOPtraining, либо, более вероятно, выяснить, что вы хотите, чтобы вы вызывали get() и предоставляли экземпляр этого класса. Тогда код будет выглядеть как myList.get(0).

0

Если this.get(i) не работает, тогда возможны 2 ошибки.

Во-первых, у вашего класса может не быть метода с именем get. Поэтому, чтобы исправить ошибку, определите метод get в своем классе.

Во-вторых, если у вас есть метод get, возможно, вы определили его с помощью ключевого слова static. В этом случае удалите ключевое слово static из определения метода. Другим решением будет замена ключевого слова this вашим именем класса. Статические методы не зависят от объектов, поэтому их можно вызывать, даже не создавая их.

+0

Как «static» влияет на мой код в зависимости от того, использую его или нет? –

+0

Я только что отредактировал свой ответ, вы можете найти больше об этом. – cdaiga

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