Рейтинг:
0
OriginalGriff
Вы определили функцию map
как возвращение целочисленного значения - так что это все, что он может передать обратно вызывающему объекту, когда он закончит. Если вы хотите, чтобы он возвращал больше данных, вам нужно изменить способ его объявления и вернуть другой тип данных.
Подумайте вот о чем: вы идете в кино, а потом хотите 15 долларов с человека. Вы вручаете им 20-долларовую купюру, а они возвращают 5 долларов и позволяют вам посмотреть фильм.
Это функция возвращает целое число:
public int pay movie(int payment, int persons) {
return payment - (persons * 15);
}
Но если вы идете в супермаркет, вы ожидаете, что магазин позволит вам уйти с пакетом продуктов и вашей сдачей - и это вообще не вписывается в целое значение, поэтому вам нужно вернуть экземпляр класса, который содержит массив продуктов и целое значение изменения.
Если вы хотите, чтобы ваш
map
функция для передачи сетки обратно к тому, что ее вызвало, затем вам нужно, чтобы она возвращала массив:
public int[][] map() {
...
return grid;
}
И измените свой код, который вызывает его, чтобы обрабатывать другой тип возвращаемого значения.
chandra liquidzey rapier
Ладно, спасибо за объяснение, я даже не знал, что вы можете сделать такую функцию для 2Darray,
но теперь проблема заключается в том, что если бы я вернул сетку, которую я рандомизировал элемент внутри цикла for
как мне вернуть эту сетку с элементами, которые были заполнены в этом цикле? потому что когда я возвращаю grid[i][j] или grid, это только ноль, потому что я не могу использовать i и j вне цикла
OriginalGriff
Нет, вы не можете - но если вы вернете весь массив вызывающему объекту, то он может использовать свои собственные i и j для доступа к массиву любым необходимым ему способом.
Подумайте об этом: "карта" не знает, что вызывающий будет делать с сеткой, поэтому она понятия не имеет, какие значения i или j она должна возвращать в любом случае, и нет никакого смысла создавать и заполнять сетку внутри функции, если вы не передадите все это обратно вызывающему, когда это будет сделано.
Я бы сделал так, чтобы функция map принимала два целочисленных параметра, которые задают размер сетки x и y (вместо того, чтобы использовать фиксированные размеры (10, 10), которые вы делаете), и возвращала всю сетку этого размера для вызывающего абонента, чтобы он делал то, что хочет.
В этом есть смысл?
chandra liquidzey rapier
Я вроде как понимаю, но не знаю, с чего начать :(
и я не знаю, как это передать, может быть, вы можете привести пример?
OriginalGriff
public int[][] map(int x, int y) {
...
return grid;
}
И затем
int[][] grid = map(10, 20);
chandra liquidzey rapier
я хотел передать свой код здесь, но он не позволяет мне, потому что немного слишком долго
СУ, то, что я сделал, по вашим словам, я сделал функцию такой
общественная int карте(тип int[][] решетки, я инт, инт Дж)
я определил размер сетки[][] на основе i и j, которые я объявил в основном, это одно и то же?
но он все еще не распечатывает сетку с рандомизированными элементами, которая была зациклена в функции
OriginalGriff
Зачем вообще пропускать сетку? Пусть функция map справится с этим и вернет всю сетку в main.
Но если вы хотите распечатать сетку, вам нужно пройти через все элементы, распечатывая каждый из них - точно так же, как если бы вы печатали их вручную!
Поэтому напишите вторую функцию, которая берет сетку (и использует ее размеры), которая содержит два вложенных цикла: один для строк и внутренний для столбцов внутри строки. Внутри петель вы печатаете каждый элемент.
public void printMap(int[][]map) {
...
}
Вы можете получить количество строк с map.length и количество столбцов для каждой строки с map[y].length
http://ice-web.cc.gatech.edu/ce21/1/static/JavaReview-RU/Array2dBasics/a2dLoop.html
chandra liquidzey rapier
так что, несмотря ни на что, я не могу просто вернуть элементы, которые были рандомизированы в функции, в основную без другой функции, чтобы распечатать ее первой?
спасибо за объяснение, очень ценю, мне очень жаль, если я не могу понять, это немного сбивает меня с толку о том, как на самом деле передача и возврат функций работают в некоторых сложных случаях
OriginalGriff
Вы можете вернуть весь массив, но если вы хотите вернуть подмножество этого массива, вам нужно будет создать новый, меньший массив и вернуть его.
Чего вы пытаетесь этим добиться? Может быть, вы пытаетесь пойти по совершенно неправильному пути, но я не могу сказать отсюда! :смеяться:
chandra liquidzey rapier
Честно говоря, нет никакой цели, только дурачиться с функцией и 2d-массивом, я пытаюсь изучить ее по частям, просто пытаюсь понять ее полностью и использовать функции в некоторых многих сложных случаях
OriginalGriff
Не пытайтесь выучить "кусочек за кусочком" - вы упустите слишком многое из того, о чем даже не подозреваете!
Возьмите книгу (или лучше курс) и следуйте ей от начала до конца. Эддисон Уэсли, как и Роксана, делает несколько хороших вещей. Курс лучше, потому что репетитор может попробовать другой способ объяснить что-то, если вы не понимаете. Но пытаться научиться этому, просто пытаясь заставить вещи работать, - не очень хороший метод, поскольку вы никогда не знаете, что вы не встречали, что может сделать его проще и / или лучше-или почему он работает, когда он работает!
chandra liquidzey rapier
Спасибо, чувак, ценю твои советы
но есть ли какая-нибудь Бесплатная книга? я тоже пытался достать книги, но в основном они очень дорогие
OriginalGriff
Для Java я не уверен - для C# есть желтая книга, но я не знаю Эквивеланта Java.
Вы можете попробовать свою местную библиотечную службу - если у них их нет, они обычно могут заказать их из регионального штаба?