2013-04-23 6 views
-1

Я пытаюсь написать конструктор для класса, который принимает ArrayList (содержащий целые числа) в качестве одного из его аргументов. При создании экземпляра этого класса я передам соответствующий, предварительно заполненный список значений, поэтому я не хочу создавать пустой список внутри конструктора.Использование ArrayList в качестве параметра конструктора

К сожалению, когда я пытаюсь скомпилировать приведенный ниже код, Java выплевывает пять ошибок, все связанные с строкой 23 (определение функции моего конструктора). Любые рекомендации будут оцениваться:

/* 
* SumGenerator 
* 
* @author James Scholes 
*/ 

import java.util.ArrayList; 
import java.util.Random; 

public class SumGenerator 
{ 
    // Some initial variables 
    public int timesTable; 
    public int multiple; 

    /* 
    * Constructor 
    * 
    * @param timesTable(int): The times table to use for sum generation 
    * @param limit(int): The highest multiple to use in sum generation 
    * @param previousMultiples(ArrayList<Integer>): The previously used multiples to avoid sum duplication 
    */ 
    public SumGenerator(int timesTable, int limit = 10, ArrayList<Integer> previousMultiples) 
    { 
     this.timesTable = timesTable; 
     Random randomGenerator = new Random(); 

     // Create a list to store our multiples 
     ArrayList<Integer> multiples = new ArrayList<Integer>(); 
     // and add our multiples to it, only if 
     // they haven't been used before 
     for(int i = timesTable; i <= limit; i++) 
     { 
      if(previousMultiples.contains(i)) 
      { 
       continue; 
      } 
      else 
      { 
       multiples.add(i); 
      } 
     } 

     this.multiple = multiples.get(randomGenerator.nextInt(multiples.size())); 
    } 

} 

SumGenerator.java:23: error: ')' expected 
    public SumGenerator(int timesTable, int limit = 10, ArrayList<Integer> previousMultiples) 
               ^
SumGenerator.java:23: error: illegal start of type 
    public SumGenerator(int timesTable, int limit = 10, ArrayList<Integer> previousMultiples) 
                ^
SumGenerator.java:23: error: <identifier> expected 
    public SumGenerator(int timesTable, int limit = 10, ArrayList<Integer> previousMultiples) 
                ^
SumGenerator.java:23: error: ';' expected 
    public SumGenerator(int timesTable, int limit = 10, ArrayList<Integer> previousMultiples) 
                ^
SumGenerator.java:23: error: <identifier> expected 
    public SumGenerator(int timesTable, int limit = 10, ArrayList<Integer> previousMultiples) 
                          ^
5 errors 
+3

Каковы эти ошибки? – Dancrumb

+1

http://stackoverflow.com/questions/997482/does-java-support-default-parameter-values –

ответ

5

Вы не можете указать значения по умолчанию для параметров в Java: int limit = 10. Чтобы обойти, поставьте перегруженные конструкторы. Один не имеет limit и будет поставлять другое значение по умолчанию.

public SumGenerator(int timesTable, ArrayList<Integer> previousMultiples) 
{ 
    this(timesTable, 10, previousMultiples); 
} 

public SumGenerator(int timesTable, int limit, ArrayList<Integer> previousMultiples) 
{ 
    // Your constructor here. 
} 
6

Java не поддерживает аргументы по умолчанию.

2
public SumGenerator(int timesTable, int limit = 10, ArrayList<Integer> previousMultiples) 

Снимите = 10 в int limit = 10. Java не поддерживает значения по умолчанию для аргументов конструктора или метода.

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