2013-11-18 3 views
3

Кажется, что должен быть способ записи вызовов product() с помощью цикла for(). Я не могу понять, как это сделать. Кто-нибудь знает дорогу?Циклические вызовы методов с различными параметрами

// store numbers 
int[] i = { 1, 7, 2, 4, 6, 54, 25, 23, 10, 65 }; 

System.out.println(product(i[0])); 
System.out.println(product(i[0], i[1])); 
........ 
System.out.println(product(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8], i[9])); 

public static int product(int... num) {...} 

Я уже писал продукт, мне просто нужно позвонить продукт с аргументами из продукта (я [0]) к продукту (я [0], я [1], я [2] ..., [9]).

Окончательный код:

// Calculate product of any amount of numbers 
public static void main(String[] args) 
{ 
    // create Scanner for input 
    Scanner in = new Scanner(System.in); 

    // store numbers 
    int[] array = { 1, 7, 2, 4, 6, 14, 25, 23, 10, 35 }; 

    for (int j = 1 ; j <= array.length; j++) { 

     // Construct a temporary array with the required subset of items 
     int[] tmp = new int[j]; 

     // Copy from the original into the temporary 
     System.arraycopy(array, 0, tmp, 0, j); 

     // Make a call of product() 
     System.out.println(product(tmp)); 

    } // end for 
} // end method main 

public static int product(int... num) 
{ 
    // product 
    int product = 1; 

    // calculate product 
    for(int i : num) 
     product *= i; 

    return product; 

} // end method product 

ответ

2

Вы должны создать временный массив int с необходимым количеством пунктов, скопировать суб-массив i в этот временный массив, а затем передать его в product как это:

for (int count = 1 ; count <= i.length() ; count++) { 
    // Construct a temporary array with the required subset of items 
    int[] tmp = new int[count]; 
    // Copy from the original into the temporary 
    System.arraycopy(i, 0, tmp, 0, count); 
    // Make a call of product() 
    System.out.println(product(tmp)); 
} 
+0

Это несколько, что я ищу, но мое назначение хочет, чтобы вызвать метод с переменным количеством аргументов, такие как продукт (я [0]), продукт (я [0], i [1]) и т. д. Было бы очень удобно использовать ... символы, как в (для (int j = 0; j Hosch250

+0

@ user2509848 Это именно то, что произойдет, когда вы запустите код из ответа: переменное количество аргументов является «синтаксическим сахаром» поверх создания массива, т. е. когда вы делаете 'product (i [0], i [1], i [2])', компилятор производит 'product (new int [] {i [0], i [1], i [2]})' за сцены перед вызовом – dasblinkenlight

+0

ОК. Я спрошу своего учителя, если все в порядке. Кстати, когда я проверил ваш код, моя IDE не смогла найти arrayCopy. Что мне нужно импортировать? – Hosch250

0

Я прокрутил и отслеживал каждый результат продукта, а затем разместил эти значения в новом массиве. Наконец, вызовите метод продукта для вновь созданного массива со всеми продуктами.

int[] listOfProducts = new int[i.length]; 
int [] tempArray; 
for(int x = 0; x<i.length; x++){ 
    //copy i[0] to i[x] into tempArray 
    System.arraycopy(i, 0, tempArray, 0, x+1); 
    listOfProducts[x] = product(tempArray); 
} 
System.out.println(product(listOfProducts)); 
+0

Спасибо за ваше время, но я просто хочу вызвать продукт с аргументами из продукта (i [0]) на продукт (i [0], i [1], i [2] ..., [9]). У меня уже есть продукт, но форма сказала, что у меня слишком много кода для публикации. Теперь я уточню свой вопрос. – Hosch250

0

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

public static int product (int... numbers) { 
    int product = 1; 
    for (int number : numbers) { 
     product *= number; 
    } 
    return product; 
} 
+0

Спасибо. На самом деле у меня есть метод product() - жаль, что я не уточнил, что лучше, но это не позволит мне опубликовать весь мой код. Я хочу вызвать продукт с аргументами из продукта (i [0]) в произведение (i [0], i [1], i [2] ..., [9]). – Hosch250

+0

@ user2509848 Взгляните на определение моего метода. С синтаксисом 'int ...' вы можете вызывать его с любым количеством 'int', не перегружая его. – Mureinik

+0

@ user2509848 игнорировать мой последний комментарий, я только понял, что я неправильно понял в вашем исходном вопросе. – Mureinik

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