Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Murowayn
4 / 3 / 1
Регистрация: 21.10.2017
Сообщений: 76

Override toString() для класса

23.02.2021, 17:11. Показов 1561. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вызывается метод Object.toString(). Как мне его переопределить для объекта класса?
Java
1
2
3
4
5
6
7
public class Program {
    public static void main(String[] args) {
        Matrix matrix = new Matrix(10);
        matrix.Fill();
        matrix.Print();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Matrix {
    private int[][] matrix;
    
    public Matrix(int size) {
        matrix = new int[size][size];
    }
 
    public void Fill() {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = 1;
            }
        }
    }
 
    public void Print() {
        System.out.println(matrix.toString());
    }
    
    @Override
    public String toString() {
        String str = "";
 
        for (int i = 0; i < matrix.length; i++) {
            str += matrix[i][0];
            for (int j = 1; j < matrix[i].length; j++) {
                str += " " + matrix[i][j];
            }
            str += ('\n');
        }
 
        return str;
    }
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2021, 17:11
Ответы с готовыми решениями:

Задать цвет для объекта класса Integer, преобразованного в строку методом toString()
Здравствуйте. Подскажите, пожалуйста, возможно ли задать цвет шрифта объекту класса Integer, преобразованному в строку методом toString()? ...

Переопределить метод toString для подкласса
Допустим есть класс Car: import java.lang.reflect.*; public class Car implements Comparable&lt;Car&gt;{ private String mark; private...

Переопределение toString для вывода List
Как в данном случае переопределить toString public class DBtoList { private int id; private String name; private String...

15
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
23.02.2021, 18:14
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Matrix {
    private int[][] matrix;
    
    public Matrix(int size) {
        matrix = new int[size][size];
    }
    
    public class Inner {
        @Override
        public String toString() {
            String str = "";
 
            for (int i = 0; i < matrix.length; i++) {
                str += matrix[i][0];
                for (int j = 1; j < matrix[i].length; j++) {
                    str += " " + matrix[i][j];
                }
                str += ('\n');
            }
 
            return str;
        }
    }
 
    public void Fill() {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = 1;
            }
        }
    }
 
    public void Print() {
        System.out.println(new Inner().toString());
    }
}
0
 Аватар для Murowayn
4 / 3 / 1
Регистрация: 21.10.2017
Сообщений: 76
23.02.2021, 20:26  [ТС]
Tavashi, такой вариант действительно работает. Но почему тогда я не могу переопределить toString() для Matrix?

Добавлено через 1 час 49 минут
Как оказалось, нечего странного не происходило. Я вызывал метод toString() от поля класса (matrix.toString()), по этому на выходе был Object.toString(). Естественно, для вывода на экран нужно было непосредственно вызывать метод System.out.println(toString()); Невнимательность... Всем спасибо за помощь и внимание.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.02.2021, 20:33
Цитата Сообщение от Murowayn Посмотреть сообщение
System.out.println(toString())
0
 Аватар для Murowayn
4 / 3 / 1
Регистрация: 21.10.2017
Сообщений: 76
23.02.2021, 20:35  [ТС]
iSmokeJC, что именно вас удивило?))
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.02.2021, 20:41
Лучший ответ Сообщение было отмечено Murowayn как решение

Решение

Цитата Сообщение от Tavashi Посмотреть сообщение
System.out.println(new Inner().toString());
Какой тогда вообще смысл переопределения toString() ?
System.out.println(new Inner());

Добавлено через 1 минуту
Цитата Сообщение от Murowayn Посмотреть сообщение
вас удивило?
Меня это не удивило.
Переопределение метода toString() как раз и имеет смысл, чтобы явно его не вызывать.

Добавлено через 3 минуты
Java
1
2
3
4
5
public static void main(String[] args) {
        Matrix m = new Matrix(10);
        m.fill();
        System.out.println(m);
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Matrix {
    private int[][] matrix;
 
    public Matrix(int size) {
        matrix = new int[size][size];
    }
 
    public void fill() {
        for (int[] ints : matrix) {
            Arrays.fill(ints, 1);
        }
    }
 
    @Override
    public String toString() {
        StringBuilder str = new StringBuilder();
        for (int[] row : matrix) {
            str.append(Arrays.toString(row)).append('\n');
        }
        return str.toString();
    }
}
1
 Аватар для Murowayn
4 / 3 / 1
Регистрация: 21.10.2017
Сообщений: 76
23.02.2021, 20:44  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Какой тогда вообще смысл переопределения toString() ?
iSmokeJC, согласен. Тогда можна написать просто System.out.println(this); Или вы знаете лучший вариант?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.02.2021, 20:46
Цитата Сообщение от Murowayn Посмотреть сообщение
this
Если объект хочет напечатать сам себя - да.
1
 Аватар для Tavashi
1172 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,858
23.02.2021, 20:58
Цитата Сообщение от Murowayn Посмотреть сообщение
Но почему тогда я не могу переопределить toString() для Matrix?
Потому что в классе Matrix вы переопределяете метод toString() класса Object, а вам нужно переопределять для класса Matrix. В одном и том же классе Matrix так сделать нельзя и нужно использовать вложенные классы для вашего случая:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Matrix {
    private int[][] matrix;
    
    public Matrix(int size) {
        matrix = new int[size][size];
    }
    
    public class Inner {}
 
    public void Fill() {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = 1;
            }
        }
    }
 
    public void Print() {
        System.out.println(new Inner() {
            @Override
            public String toString() {
                String str = "";
 
                for (int i = 0; i < matrix.length; i++) {
                    str += matrix[i][0];
                    for (int j = 1; j < matrix[i].length; j++) {
                        str += " " + matrix[i][j];
                    }
                    str += ('\n');
                }
 
                return str;
            }
        });
    }
}
Добавлено через 1 минуту
Цитата Сообщение от Murowayn Посмотреть сообщение
Я вызывал метод toString()
Его необязательно указывать явно.
1
23.02.2021, 21:01

Не по теме:


Tavashi, не в обиду - вот этот код, это последствия отмечания 23 февраля?

0
23.02.2021, 21:09  [ТС]

Не по теме:

iSmokeJC, нет, я только учусь.

0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.02.2021, 21:13
Murowayn, я понимаю )))
1
 Аватар для Murowayn
4 / 3 / 1
Регистрация: 21.10.2017
Сообщений: 76
23.02.2021, 21:14  [ТС]
iSmokeJC, подскажите пожалуйста. Почему я не могу инициализировать двумерный массив таким образом?
Java
1
2
3
4
5
6
Random rand = new Random();
        for (int[] row : matrix) {
            for (int i : row) {
                i = rand.nextInt(maxValue);
            }
        }
Если вложенный массив записать как for, а не foreach, то все будет работать.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.02.2021, 21:15
Murowayn, форыч только для чтения
1
 Аватар для Murowayn
4 / 3 / 1
Регистрация: 21.10.2017
Сообщений: 76
23.02.2021, 21:16  [ТС]
iSmokeJC, это связано с интерфейсом Iterable<T>?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
23.02.2021, 21:22
Вообще не понял вопроса. При чем тут Iterable?
На, почитай
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2021, 21:22
Помогаю со студенческими работами здесь

Суть Override для ToString()
Объясните суть override здесь, ведь он переопределяет вызов метода в производном классе от базового, но его тут нет, еще непонятно что...

Нет доступа к скрытым полям для метода override ToString() (инкапсуляция)
Всем доброго времени суток В универе задали такое задание сделать инкапсуляцию скрытых полей для студентов, все работает кроме доступа...

Override string ToString()
Подскажите пожалуйста , как в public override string ToString() (в конце программы ) сделать запись , чтобы в ...

Enum ToString Override
Есть к примеру public enum Numbers { One, Thousand }

Возврат 2 переменных в override в методе ToString
Добрый всем день! Подскажите пожалуйста, как можно вызвать две переменные в override ?? Вот код: public override string...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru