Как передать массив в класс
Перейти к содержимому

Как передать массив в класс

  • автор:

Как передать массив в класс 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.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.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(), модифицируется, после возврата он будет содержать набранные символы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *