Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
31 / 31 / 6
Регистрация: 11.07.2013
Сообщений: 241
1

Возврат нескольких значений из метода не знаем сколько таких значений

29.08.2013, 01:34. Показов 5677. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Собственно вопрос: как возвращать <несколько> значений из метода если заранее неизвестно <сколько> их будет, ну известно разве что не больше некого числа? При этом может случиться, что вообще ничего не нужно возвращать(<несколько> == 0)

Ну например, есть двумерный массив, и нужно вернуть из метода номера всех тех строчек, в которых бла бла бла.. Но в принципе, в массиве может не оказаться ни одной такой строчки(и что делать в этом случае?)

Сам думал возвращать сначала массив, но не особо он годиться(будет не до конца заполнен) или мб какой-то ArrayList но тоже не знаю как описать случай, когда он будет пустой.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2013, 01:34
Ответы с готовыми решениями:

Возврат нескольких значений из метода
Здравствуйте! Собственно вопрос, какие есть варианты вернуть из метода несколько значений? На ум...

Возврат двух значений из метода
Доброго времени суток, господа. Столкнулся с проблемой: нужно возвратить два значения с одного...

Возврат из функции нескольких значений
Дан массив . Выбрать из него положительные элементы и записать в массив A , где k&lt;6; из...

Возврат нескольких значений в функции
Всем привет. До этого никогда не задавался этим вопросом но сейчас нужно стало. Не пойму никак как...

14
273 / 241 / 56
Регистрация: 29.05.2012
Сообщений: 889
29.08.2013, 01:55 2
Методом isEmpty из класса ArrayList узнаём пустой он или нет.
1
38 / 38 / 10
Регистрация: 04.02.2013
Сообщений: 106
29.08.2013, 02:45 3
Используйте ArrayList. Просто потом проверьте что он не null и все (в примере если введен "0", то считается как будто данные не введены - просто для наглядности):

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
import java.util.ArrayList;
 
public class Test {
    public static void main(String... args){
        ArrayList<Integer> list = getSomething(Integer.parseInt(args[0]));
        
        if (list != null){
            for (Integer i: list)
                System.out.println(i);
        } else {
            System.out.println("List is empty.");
        }
    }
    
    public static ArrayList<Integer> getSomething(int data){
        ArrayList<Integer> dataList = null;
        
        if (data != 0){
            dataList = new ArrayList<>();
            dataList.add(new Integer(data));
        } 
        
        return dataList;        
    }
}
1
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
29.08.2013, 09:56 4
Цитата Сообщение от Divizal Посмотреть сообщение
Используйте ArrayList. Просто потом проверьте что он не null и все
Плохая идея. использования null как возвращаемого значения стоит избегать где только возможно. А уж в ArrayList сам Бог велел возвращать пустую коллекцию.
1
31 / 31 / 6
Регистрация: 11.07.2013
Сообщений: 241
29.08.2013, 12:32  [ТС] 5
да, лучше проверять на isEmpty чем на null
0
38 / 38 / 10
Регистрация: 04.02.2013
Сообщений: 106
29.08.2013, 13:13 6
Цитата Сообщение от Skipy Посмотреть сообщение
Плохая идея. использования null как возвращаемого значения стоит избегать где только возможно. А уж в ArrayList сам Бог велел возвращать пустую коллекцию.
Почему? Разве не все-равно проверять - пустая коллекция или null?
0
31 / 31 / 6
Регистрация: 11.07.2013
Сообщений: 241
29.08.2013, 14:15  [ТС] 7
нет, не все равно
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
29.08.2013, 14:24 8
Цитата Сообщение от Divizal Посмотреть сообщение
Почему? Разве не все-равно проверять - пустая коллекция или null?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.ArrayList;
import java.util.List;
 
public class MainClazz {
 
    public static void main(String[] args) {
         
        List<Integer> list = new ArrayList<>();
        List<Integer> list2 = null;
        
        for (Integer i : list) {
            System.out.println(i);
        }
 
        for (Integer i : list2) {
            System.out.println(i);
        }
    }
}
угадайте в какой строке получите NullPointerException
1
38 / 38 / 10
Регистрация: 04.02.2013
Сообщений: 106
29.08.2013, 15:16 9
Цитата Сообщение от tankomaz Посмотреть сообщение
угадайте в какой строке получите NullPointerException
В задаче предполагается что метод вернет список. И поэтому чтобы не схватить нуллпоинтер достаточно проверить что возвращаемый список не null. Поэтому я и спрашиваю - в чем разница? Ведь на создание пусть даже пустого списка какая-то часть памяти тратится.
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
29.08.2013, 15:21 10
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Divizal Посмотреть сообщение
В задаче предполагается что метод вернет список. И поэтому чтобы не схватить нуллпоинтер достаточно проверить что возвращаемый список не null. Поэтому я и спрашиваю - в чем разница? Ведь на создание пусть даже пустого списка какая-то часть памяти тратится.
Разница в том, что когда Вы этот список передадите через 10 вызовов - Вы гарантированно где-то забудете проверить. Или забудет тот, кто пишет метод, который Вы вызываете. Просто поверьте опыту старых java-разработчиков - если есть возможность не передавать null, лучше ею воспользоваться. Это вызовет существенно меньше проблем в конечном итоге.

А про память Вы будете думать тогда, когда ее реально станет не хватать. И, опять-таки поверьте, профилировка покажет 100500 причин расхода ДО Вашего "лишнего" списка.
3
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
29.08.2013, 15:59 11
Цитата Сообщение от Divizal Посмотреть сообщение
В задаче предполагается что метод вернет список...
представьте, что list и list2 вернулись из метода и попадают под for-each. Согласитесь, if (list2 != null) это по меньшей мере утомляет, засоряет код и отсутствие приводит к "самому страшному" кошмару в виде NullPointerException
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12460 / 7484 / 1754
Регистрация: 25.07.2009
Сообщений: 13,762
29.08.2013, 16:57 12
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
import java.util.Random;
 
public class SomeValues {
    private static Random random = new Random();
    private static final int DEFAULT_RETURNED_NUMBERS = 10;
    private static final int [] EMPTY_ARRAY = new int [ 0 ];
    
    static int [] someNumbers(int maxNumbersCount) {
        int numbersCount = random.nextInt(maxNumbersCount);
        if ( numbersCount == 0 )
            return EMPTY_ARRAY;
        else {
            int [] arr = new int [ numbersCount ];
            for ( int i = 0; i < arr.length; ++i )
                arr[i] = random.nextInt(numbersCount * 10);
            return arr;
        }
    }
    
    static int [] someNumbers() {
        return someNumbers(DEFAULT_RETURNED_NUMBERS);
    }
    
    public static void main(String [] args) {
        for ( int i = 0; i < 10; ++i ) {
            System.out.format("Set #%02d: ", ( i + 1 ));
            for ( int j : someNumbers() )
                System.out.print(j + " ");
            System.out.println();
        }
    }
}
0
tankomaz
29.08.2013, 17:23
  #13

Не по теме:

easybudda, вопрос оффтопный (по код конвеншену), но вы пишите

Java
1
int [] someNumbers
, это вы так привыкли или моя привычка такие вещи писать как
Java
1
int[] someNumbers
пагубная в профессиональном коллективе?

0
easybudda
29.08.2013, 17:27
  #14

Не по теме:

tankomaz, сугубо моя привычка, мне так нагляднее кажется.

1
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
31.08.2013, 10:36 15
Цитата Сообщение от Divizal Посмотреть сообщение
Ведь на создание пусть даже пустого списка какая-то часть памяти тратится.
Если поставить тип возвращаемого значения у метода - List<Integer>, то можно будет не создавать каждый раз пустой список, а использовать Collections.emptyList
Java
1
2
3
4
public static List<Integer> getSomething(int data){
   //...
   return Collections.emptyList();
}
2
31.08.2013, 10:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2013, 10:36
Помогаю со студенческими работами здесь

Возврат нескольких значений из функции
Здравствуйте, Подскажите пожалуйста, как можно передать из функции 2 результата, например, в...

Возврат нескольких значений из функции
У меня было задание в двух матрицах найти одинаковые элементы вывести их и их индексы. Сделать...

Передача параметров и возврат значений из асинхронного метода
Для примера есть метод, который по замыслу должен в асинхронном режиме возвращать содержимое...

Возврат из хранимой процедуры нескольких значений
Помогите пожалуйста разобраться с тем, как из хранимой процедуры получить в С# несколько значений...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru