0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 3

Работа с классами

13.05.2014, 23:43. Показов 1256. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Давно делал программы с множеством классов, но вот нашол проблему.. Объясните где ошибка...
Java
1
2
3
4
5
6
7
8
public class Test {
    public static void main (String [] args) {
        int a = 5;
        Test2 t = new Test2 (a);
        t.mmm();
        System.out.println(a);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
public class Test2 {
    int k;
    Test2 (int r) {
        this.k = r;
    }
     
    public void mmm () {
        k=0;
    }
}
Вот два маленьких класса.. В главном классе создается экземпляр Test2 и переменная "а" в главном классе через конструктор переприсваивается локальной переменой k в Test2... Вызывается метод mmm который изменяет локальную переменную k.. И выводится "a" в главном классе.. Выводит ожиданий результат a=5...
А вот следующий пример аналогичен, но с матрицами..
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test {
    public static void main (String [] args) {
        double [][] A = {
                {1,2,3,4},
                {5,6,7,8},
                {9,10,11,12},
                {13,14,15,16}
            };
        Test2 t = new Test2 (A);
        t.mmm();
    
        for (int i=0;i<A.length;i++){
            System.out.println();
            for(int j=0;j<A[i].length;j++) 
                System.out.print(A[i][j]+"  ");
    }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
public class Test2 {
    double[][] tt;
    
    Test2 (double r[][]) {
        this.tt = r;
    }
     
    public void mmm () {
        tt[2][2]=2;
    }
}
Выводит результат где A[2][2] = 2... Почему?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2014, 23:43
Ответы с готовыми решениями:

Работа с Классами
Реализовать класс Bankomat, моделирующий работу банкомата. В классе должны содержаться поля для хранения идентификационного номера...

Работа с классами
Уважаемые профи помогите с решением задачи и подскажите,что ДЕЙСТВИТЕЛЬНО СТОИТ почитать по Java, чтобы в голове всё укладывалось по...

Работа с классами
Работа с классами Создать классы, спецификации которых приведены ниже. определить кон- структоры и методы setТип () getТип ()...

6
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
14.05.2014, 00:49
Sluva1410, потому что массив - это объект.
Для работы с объектами используются ссылки

Каждый язык программирования имеет свои средства манипуляции данными. Иногда программисту приходится быть постоянно в курсе, какая именно манипуляция производится в программе. Вы работаете с самим объектом или же с каким-то видом его косвенного представления (указатель в C или в C++), требующим особого синтаксиса? Все эти различия упрощены в Java. Вы обращаетесь со всем как с объектом, и поэтому повсюду используется единый последовательный синтаксис. Хотя вы обращаетесь со всем как с объектом, идентификатор, которым вы манипулируете, на самом деле представляет собой ссылку на объект. Представьте себе телевизор (объект) с пультом дистанционного управления (ссылка). Во время владения этой ссылкой у вас имеется связь с телевизором, но при переключении канала или уменьшении громкости вы распоряжаетесь ссылкой, которая, в свою очередь, манипулирует объектом. А если вам захочется перейти в другое место комнаты, все еще управляя телевизором, вы берете с собой «ссылку», а не сам телевизор. Также пульт может существовать сам по себе, без телевизора. Таким образом, сам факт наличия ссылки еще не означает наличия присоединенного к ней объекта.

Особый случай: примитивные типы

Одна из групп типов, часто применяемых при программировании, требует особого обращения. Их можно назвать «примитивными» типами (табл. 2.1). Причина для особого обращения состоит в том, что создание объекта с помощью new — особенно маленькой простой переменной — недостаточно эффективно, так как new помещает объекты в кучу. В таких случаях Java следует примеру языков C и C++. То есть вместо создания переменной с помощью new создается «автоматическая» переменная, не являющаяся ссылкой. Переменная напрямую хранит значение и располагается в стеке, так что операции с ней гораздо производительнее.
В Java размеры всех примитивных типов жестко фиксированы. Они не меняются с переходом на иную машинную архитектуру, как это происходит во многих других языках. Незыблемость размера — одна из причин улучшенной переносимости Java-npoгpaмм.

Массивы в Java

Фактически все языки программирования поддерживают массивы. Использование массивов в C и C++ небезопасно, потому что массивы в этих языках представляют собой обычные блоки памяти. Если программа попытается получить доступ к массиву за пределами его блока памяти или использовать память без предварительной инициализации (типичные ошибки при программировании), последствия могут быть непредсказуемы.
Одной из основных целей Java является безопасность, поэтому многие проблемы, досаждавшие программистам на C и C++, не существуют в Java. Массив в Java гарантированно инициализируется, к нему невозможен доступ за пределами его границ. Проверка границ массива обходится относительно дорого, как и проверка индекса во время выполнения, но предполагается, что повышение безопасности и подъем производительности стоят того (к тому же Java иногда может оптимизировать эти операции). При объявлении массива объектов на самом деле создается массив ссылок, и каждая из этих ссылок автоматически инициализируется специальным значением, представленным ключевым словом null. Оно означает, что ссылка на самом деле не указывает на объект. Вам необходимо присоединять объект к каждой ссылке перед тем, как ее использовать, или при попытке обращения по ссылке null во время исполнения программы произойдет ошибка. Таким образом, типичные ошибки при работе с массивами в Java предотвращаются заблаговременно.
Также можно создавать массивы простейших типов. И снова компилятор гарантирует инициализацию — выделенная для нового массива память заполняется нулями. Массивы будут подробнее описаны в последующих главах. В большинстве языков программирования концепция жизненного цикла переменной требует относительно заметных усилий со стороны программиста. Сколько «живет» переменная? Если ее необходимо удалить, когда это следует делать? Путаница со сроками существования переменных может привести ко многим ошибкам, и этот раздел показывает, насколько Java упрощает решение затронутого вопроса, выполняя всю работу по удалению за вас.

Добавлено через 5 минут
Пардон, забыл указать источник:
Кликните здесь для просмотра всего текста
http://wikijava.org.ua/index.php?title=Thinking_in_Java_4th_edi tion
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 3
14.05.2014, 01:20  [ТС]
Тогда надо делать еще один массив что бы передать его в другой класс?? Мне нужно работать с массивом в другом классе, но чтобы в главном классе он был неизменен...
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
14.05.2014, 01:22
Sluva1410, тогда еще проще. Это:
Java
1
2
3
Test2 (double r[][]) {
        this.tt = r;
}
заменяем на:
Java
1
2
3
Test2 (double r[][]) {
        this.tt = r.clone();
}
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 3
14.05.2014, 02:06  [ТС]
Поменял.. Не помогло.. Все равно меняется...
0
173 / 131 / 74
Регистрация: 04.12.2013
Сообщений: 552
14.05.2014, 10:18
Sluva1410, ок. Тогда:
Java
1
2
3
4
5
6
7
8
9
Test2 (double[][] r) {
        
        tt = new double[r[0].length][r.length];
        
        for (int i = 0; i < r.length; i++){
            for(int j=0;j<r[i].length;j++) 
                tt[i][j] = r[i][j];
    }
    }
0
14.05.2014, 10:57

Не по теме:

Цитата Сообщение от Prorok2323 Посмотреть сообщение
заменяем на:
прикол в том, что таким образом клонируется только первая строка двухмерного массива - она действительно будет клоном и в ней можно менять значения

что бы клонировать двумерный массив можно пробежать по строкам и вызвать на каждой clone()

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.05.2014, 10:57
Помогаю со студенческими работами здесь

Работа с классами
Нужна помощь. Не могу понять в чем ошибка,так как еще новичек.Помогите пожалуйста. Вот ,что пишет компилятор: Exception in thread...

Работа с классами в Java
Добрый день.Задача:Описать класс с именем Route, содержащий следующие поля: название начального пункта маршрута, название конечного пункта...

Работа с абстрактными классами
Создать абстрактный класс Currency (валюта) для работы с денежными суммами. Определить абстрактными методы перевода в рубли и вывода на...

Работа между классами
Есть главный класс main.java, есть класс pampam.java, созданный отдельно путем &quot;new&quot;-&gt;&quot;Java class&quot;... Как можно вызвать из main,...

Работа с классами и объектами
Необходимо вывести на экран перечень стран, у которых: 1) площадь больше или равна введенному пользователем с клавиатуры значению; 2)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru