Как передать массив в класс java
Для передачи массива в класс Java , вам необходимо создать переменную типа массива в вашем классе и передать массив в качестве аргумента в конструктор или метод класса.
public class MyClass private int[] myArray; public MyClass(int[] myArray) this.myArray = myArray; > public void printArray() for (int i : myArray) System.out.println(i); > > > // пример использования int[] numbers = 1, 2, 3, 4, 5>; MyClass myObject = new MyClass(numbers); myObject.printArray(); // => [1, 2, 3, 4, 5]
- Здесь мы создаем класс MyClass с переменной экземпляра myArray типа int[]
- Затем мы создаем конструктор, который принимает myArray в качестве аргумента и устанавливает его как значение переменной экземпляра myArray .
- Далее мы определяем метод printArray() , который просто выводит элементы массива на консоль.
- Когда мы создаем объект MyClass , мы передаем массив numbers в качестве аргумента конструктора, что приводит к тому, что значения в numbers будут присвоены myArray .
- Затем мы вызываем метод printArray() , который выводит содержимое myArray на консоль.
Как передать массив в другой класс java
Прошу прощения, еще не всё знаю, учусь. Вопрос простой по сути, я знаю что по-жесткачу туплю. Суть вот в чем. У меня в основном классе Data_form происоходят основные действия, и по ним заполняется массив строк, двумерный массив. Необходимо во втором классе GetData, использовать сформировавшийся массив в первом классе (Data_form).
package Massiv; import javax.swing.SwingUtilities; public class Data_form < private GetData getData; private Data_form_Starter data_form_Starter; public String[][] twoDimArray; public static int long_of_lict; public static int getLong_of_lict() < return long_of_lict; >public static void setLong_of_lict(int long_of_lict) < Data_form.long_of_lict = long_of_lict; >public String [][] getTwoDimArray() < return twoDimArray; >public void setTwoDimArray(String[][] twoDimArray) < twoDimArray = twoDimArray; >public Data_form() < long_of_lict=3; System.out.println(" Data_form start "); String [][] twoDimArray = new String [3][3]; for (int i = 0; i < twoDimArray.length; i++) < twoDimArray [i][0] = "first"; twoDimArray [i][1] = "second"; twoDimArray [i][2] = "third"; >this.twoDimArray = twoDimArray.clone(); for (int i = 0; i < twoDimArray.length; i++) < //идём по строкам System.out.print("Data_form " + i + " "); //вывод порядкового номера элемента for (int j = 0; j < 3; j++)/идём по столбцам System.out.print(" " + twoDimArray[i][j] + " "); //вывод элемента > System.out.println();//перенос строки ради визуального сохранения табличной формы > System.out.println(" Data_form end " + twoDimArray.length); > public static void main(String[] args) < SwingUtilities.invokeLater(new Runnable() < public void run() < new Data_form(); new Data_form_Starter(); GetData getData = new GetData(this); >>); > >
второй класс, в который надо передать массив, и напривер вывести в консоль
package Massiv; import java.util.ArrayList; import java.util.Arrays; import javax.xml.crypto.Data; public class GetData < private Data_form data_form; Data_form d_form; public GetData(Runnable runnable) < // TODO Auto-generated constructor stub System.out.println(" GetData Start runnable "); String[][] NewArray = d_form.getTwoDimArray(); int longOfArray = d_form.getLong_of_lict(); System.out.println(" GetData Start runnable longOfArray " + longOfArray); NewArray = data_form.getTwoDimArray(); for (int i = 0; i < 3; i++) < //идём по строкам System.out.print(" __ " + i + " __ "); //вывод порядкового номера элемента for (int j = 0; j < 3; j++)/идём по столбцам System.out.print(" __ " + NewArray[i][j] + " __ "); //вывод элемента > System.out.println();//перенос строки ради визуального сохранения табличной формы > > >
прошу прощение за кривой код, только начинаю учится.
Как передать массив в конструктор класса?
Мне нужно считать элементы массива в конструкторе класса SegmentTree, следовательно необходимо как-то передать туда массив.
Код ниже выводит ошибку Types ‘SegmentTree’ and ‘SegmentTree *’ are not compatible
Что мне нужно сделать, чтобы все сработало?
#include #include #include using namespace std; class SegmentTree < private: int tree[]; public: SegmentTree(int array[], int length)< int size = (1 >; int main(int argc, const char * argv[]) < // insert code here. int n; cin >> n; int a[n]; for (int i = 0; i < n; ++i) cin >> a[i]; SegmentTree tree = new SegmentTree(a, n); >
- Вопрос задан более двух лет назад
- 378 просмотров
Комментировать
Решения вопроса 1
Wataru @wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Читайте ошибку внимательно. Дело не в массиве.
Вместо SegmentTree tree = new SegmentTree(a, n);
надо
SegmentTree tree(a, n); или SegmentTree *tree = new SegmentTree(a, n);
new — создает указатель. Инициализировать им нужно, соответственно, указатель.
Передача массивов в функции
Здесь рассмотрена операция по передаче массивов в качестве аргументов функции, поскольку существуют исключения из стандартного правила передачи по значению.
Когда массив используется в качестве аргумента функции, передается только адрес массива, а не копия всего массива. При вызове функции с именем массива в функцию передается указатель на первый элемент массива. (Надо помнить, что в С имена массивов без индекса — это указатели на первый элемент массива.) Параметр должен иметь тип, совместимый с указателем. Имеется три способа объявления параметра, предназначенного для получения указателя на массив. Во-первых, он может быть объявлен как массив, как показано ниже:
#include
void display(int num[10]);
int main (void) /* вывод чисел */
int t [10], i;
for (i=0; i display(t);
return 0;
>
Хотя параметр num объявляется как целочисленный массив из десяти элементов, С автоматически преобразует его к целочисленному указателю, поскольку не существует параметра, который мог бы на самом деле принять весь массив. Передается только указатель на массив, поэтому должен быть параметр, способный принять его.
Следующий способ состоит в объявлении параметра для указания на безразмерный массив, как показано ниже:
где num объявлен как целочисленный массив неизвестного размера. Поскольку С не предоставляет проверку границ массива, настоящий размер массива не имеет никакого отношения к параметру (но, естественно, не к программе). Данный метод объявления также определяет num как целочисленный указатель.
Последний способ, которым может быть объявлен num, — это наиболее типичный способ, применяемый при написании профессиональных программ, — через указатель, как показано ниже:
Он допустим, поскольку любой указатель может быть индексирован с использованием [], если он является массивом. (На самом деле массивы и указатели очень тесно связаны друг с другом.) Все три метода объявления параметра приводят к одинаковому результату — указателю. С другой стороны, элемент массива используется как аргумент, трактуемый как и другие простые переменные. Например, программа может быть написана без передачи всего массива:
void display(int num)
printf («%d «, num);
>
Как можно видеть, в display() передается параметр типа int. Не имеет значения, что display() вызывается с элементом массива в качестве параметра, поскольку передается только одно значение.
Важно понять, что при использовании массива в качестве аргумента функции происходит передача в функцию его адреса. Это означает, что код внутри функции действует и может изменять настоящее значение массива, используемого при вызове. Например, рассмотрим функцию print_upper(), выводящую строку прописными буквами:
#include
#include
void print_upper(char *string);
int main(void) /* вывод строки в верхнем регистре */
char s[80];
gets (s);
print_upper(s) ;
return 0;
>
void print_upper(char *string)
register int t;
for(t=0; string[t]; ++t)
string[t] = toupper(string[t]);
printf(«%c», string[t]);
>
>
После вызова print upper() происходит изменение содержимого массива s в main(). Если это не нужно, следует переписать программу следующим образом:
# include
#include
void print upper(char *string);
int main(void) /* вывод строки в верхнем регистре */
char s[80];
gets(s);
print_upper(s);
return 0;
>
void print_upper(char *string)
register int t;
for(t=0; string[t]; ++t)
printf («%c», toupper (string[t]));
>
В данной версии содержимое массива s остается неизменным, поскольку значения не меняются.
Классический пример передачи массивов в функции находится в стандартной библиотечной функции gets(). Хотя gets() из библиотеки Borland С++ гораздо сложнее, функция, показанная в данном примере, содержит основную идею работы. Для того, чтобы избежать путаницы и не вызвать стандартную функцию, данная функция называется xgets().
/* простейшая версия стандартной библиотечной функции gets() */
void xgets (char *s)
register char ch;
register int t;
for(t=0; t ch = getche();
switch(ch)
case ‘ \r’:
s[t] = ‘\0’; /* null завершает строку */
return;
case ‘\b’:
if(t>0) t-;
break;
default:
s[t] = ch;
t++;
>
>
s[79] = ‘ \0’;
>
Функция xgets() должна вызываться с указателем на символ. Это может быть имя символьного массива, который по определению является указателем на символ. xgets() организует цикл for от 0 до 79. Таким образом предотвращается ввод больших строк с клавиатуры. Если набирается более 80 символов, функция завершает работу. Поскольку C не имеет проверки границ массива, следует убедиться, что массив, передаваемый в xgets(), может принять, по крайней мере, 80 символов. По мере набора символов на клавиатуре они вводятся в строку. Если набирается забой, счетчик t уменьшится на 1. При нажатии на ввод помещается нулевой символ в конец строки, то есть строка оканчивается. Поскольку массив, используемый при вызове xgets(), модифицируется, после возврата он будет содержать набранные символы.