1

Тема: Передати масив у метод

Добрий день чи вечір! Джаву вивчати почала не так давно, тому є помилки щодо передачу у функціі, бо є відмінності з той же мовою Сі. Мені потрібно передавати масив у метод, але я не зовсім розумію, як це правильно робити. Розумію, що в мене можжливо все з помилками, тому прошу про допомогу :')

import java.util.Scanner;
import java.util.Random;

public class PracticeThreeSecond
{
    public static void main (String[] args)
    {
        int i;
        int[] array = new int[10];
        Scanner scan = new Scanner (System.in);
        Random random = new Random();
        System.out.println("Вкажіть розмір масиву: ");
        int size = scan.nextInt();
        array = Filling(size);
        array = Print(size, array);
        array = Replace(size, array);
        array = Print(size, array);
        // System.out.println("----------------Меню----------------");
        // System.out.printf("|1| - Заповнення випадковими числами\n|2| - Змінити значення елемента масива\n");
        // System.out.printf("|3| - Відсортувати елементи масиву за зростанням\n|4| - Надрукувати масив\n|0| - Вихід");
    }
    static int[] Filling (int size)
    {
        int[] array = new int[10];
        int i;
        for (i = 0; i < array.length; i++)
        {
            array[i] = (int) (Math.random() * 10);
        }
        return array;
    }
    static void Print(int size, int array[])
    {
        int[] array = new int[10];
        int i;
        Scanner scan = new Scanner (System.in);
        for (i = 0; i < array.length; i++)
        {
            System.out.println(array[i]);
        }
    }
    static int[] Replace (int size, int array[])
    {
        int[] array = new int[10];
        Scanner scan = new Scanner (System.in);
        int i;
        System.out.println("Який елемент Ви бажаєте змінити?");
        int element = scan.nextInt();
        System.out.println("Яке значення підставити: ");
        int el = scan.nextInt();
        for (i = 0; i < array.length; i++)
        {
            if (i == element)
            {
                array[i] = el;
            }
            System.out.println(array[i]);
        }
        return array;
    }

}

2

Re: Передати масив у метод

Що конкретно не виходить? Яка помилка? Що цей код узагалі має робити?
Як питати, щоб отримати відповідь

3

Re: Передати масив у метод

koala написав:

Що конкретно не виходить? Яка помилка? Що цей код узагалі має робити?
Як питати, щоб отримати відповідь

Вибачте, дійсно погано описала ситуацію. Потрібно було написати програму де є консольне меню, але в switch-case використовувати методи: заповнення масиву випадковими числами, його друк і т.д.. У мене проблема така - дані із Main'a не передаються у методи (розмір та сам масив програма не бачить). Прошу про пораду, що конкретно при передачі даних написано невірно

Ось наприклад, це метод заповнення масиву випадковими числами до десяти. Це шматочок із коду вище. Програма видає помилку, взагалі не робить функція

 static int[] Filling (int size)
    {
        int[] array = new int[10];
        int i;
        for (i = 0; i < array.length; i++)
        {
            array[i] = (int) (Math.random() * 10);
        }
        return array;
    }

4

Re: Передати масив у метод

Не треба так робити!якщо це жаба, користуй бібліотечны об'єкти. Якщо сі, то створювати і видаляти об'єкти треба на одному рівні!!! Інакше пам'ять уся втече.

5

Re: Передати масив у метод

Ні-ні, це щось ви явно не те робите.. Давайте логічно подумаємо. Перше, що ви просите користувача, це вказати розмір масиву, але сам масив ви вже створили, на кілька лінійок коду вище. Це виглядає трохи дивним, погоджуєтесь? Логічніше було б, спитати розмір і лиш потім створити масив. Далі, метод Filling - я гадаю він робить трохи не те, що мав би. Ви у цьому методі приймаєте розмір для створення нового масиву та його заповнення, а потім повертаєте цей новий масив. Такий підхід має право на життя, але не у вашому випадку. Якби метод називався, щось хоча б типу, CreateAndFill - тоді так, можна було б повертати новий масив. Але у вашому випадку він має лише заповнити (fill), тобто викликаючи такий метод я б не очікував, що буде створено новий масив, я б очікував лише заповнення деякими значеннями вже наявного масиву.

public void FillRandom(int[] array)
// в C++ ця функція виглядала б так: void FillRandom(int* array, int size)

Щось типу такого.

MaxPluto написав:

Програма видає помилку

Будь ласка, пишіть які помилки вам видає компілятор.

ur_naz, жаба має GC, вона сама попіклується про пам'ять.

6

Re: Передати масив у метод

Будь ласка, пишіть які помилки вам видає компілятор.



Дякую за пояснення. Компілятор видає помилку при виклику функції в Main. Тобто, несумісні типи: void не можна перетворити на int[]. Тоді всеж таки повертати значення потрібно? Вибачте, якщо дурні запитання

7

Re: Передати масив у метод

MaxPluto написав:

Компілятор видає помилку при виклику функції в Main. Тобто, несумісні типи: void не можна перетворити на int[]

Ну, все вірно. Типи дійсно несумісні, а що ви хотіли? Якщо ви нічого не повертаєте з функції, то навіщо намагаєтесь працювати з функцією так, наче вона щось повертає?

MaxPluto написав:

Тоді всеж таки повертати значення потрібно?

Ні, не потрібно.

MaxPluto написав:

Вибачте, якщо дурні запитання

Щоб вони не були дурними, я б вам радив почитати таки хоча б якусь книжку по Java, бо помилки у вас дуже елементарні.

Подякували: MaxPluto1