#java #arrays #for-loop
#java #массивы #для цикла
Вопрос:
Я пытаюсь написать класс Java, в котором основной метод создает массив для хранения 30 целых чисел. После этого я вызываю метод с именем LOAD() в основном методе, задача которого состоит в том, чтобы заполнить массив 30 целыми числами из 1-300.
Я написал то, что, по моему мнению, является полным классом Java для этого, но компилятор продолжает сообщать мне об этой ошибке, что это cannot find the symbol
для символа randomThirty, имени переменной моего массива.
Вот мой код на данный момент, но я не уверен, почему мой randomThirty не распознается LOAD(), возможно, мне нужно явно передать параметры в скобках LOAD?
import java.util.*;
public class arrayNums
{
public static void main(String args[])
{
//main method which creates an array to store 30 integers
int[] randomThirty = new int[30]; //declare and set the array randomThirty to have 30 elements as int type
System.out.println("Here are 30 random numbers: " randomThirty);
LOAD(); // the job of this method is to populate this array with 30 integers in the range of 1 through 300.
}
public static void LOAD()
{
// looping through to assign random values from 1 - 300
for (int i = 0; i < randomThirty.length(); i ) {
randomThirty[i] = (int)(Math.random() * 301);
}
Ответ №1:
Подсказка в вашем комментарии:
LOAD(); // the job of this method is to populate this array
Итак, у вас есть массив, с которым вы хотите, чтобы метод работал… вы должны передать ее методу:
load(randomThirty);
// Method declaration change...
public static void load(int[] arrayToFill)
Это хороший подход, когда метод не является естественным в контексте, где он имеет доступ к состоянию. В этом случае это выглядит как подходящий подход. В других ситуациях вы можете использовать статическую переменную или переменную экземпляра, в зависимости от контекста.
(Кстати, вам следует взглянуть на Random
класс — и узнать о соглашениях об именовании Java.)
Комментарии:
1. Это имеет смысл, хотя, когда я ввожу randomThirty в качестве параметра для LOAD(); Я все еще получаю эту ошибку в randomThirty. length() для метода length(). Итак, я удалил parens в length(), и эта ошибка исчезла, не уверен, почему на самом деле. Однако, как только я скомпилировал и запустил ее, вызов System.out.println() для проверки массива теперь выдает этот загадочный вывод: вот 30 случайных чисел: [I @12dacd1 … почему это? Разве это не должно выводить содержимое массива (должно быть 30 элементов случайного значения из 1-300).
2. @artemd: Метода длины не существует. В массивах есть поле доступной длины. И нет, вызов
toString
массива не дает вам содержимого, потому что тип массива не переопределяетсяtoString
. Вместо этого вызовитеArrays.toString(array)
.3. Хорошо, я понял терминологию для полей там, Джон Скит. Когда я использую вызов toString , массив, возвращаемый в виде строки, содержит 30 значений, но они не случайны, просто набор нулей… Что-то не так с моим циклом for? Или мой случайный просто недостаточно случайный? Я запускал его несколько раз, но он продолжает возвращать всего несколько нулей.
4. @artemd: Ну, я исправил ваш код, и у меня это работает — поэтому я предлагаю вам отредактировать свой вопрос, чтобы показать, что у вас есть сейчас.
5. Хорошо, я просто спрошу о 0 в другом вопросе.
Ответ №2:
вам нужно передать randomThirty
в свой метод load или сделать его статической переменной в классе (т. Е. Переместить его из метода).
Итак, вы могли бы сделать
LOAD(randomThirty); // pass the reference in
и измените определение вашего метода на
public static void LOAD(int[] randomThirty) {...}
или вы можете создать randomThirty
статическое свойство для класса
public class arrayNums {
// will be available anywhere in the class; you don't need to pass it around
private static int [] RANDOM_THIRTY = new int[30]; // instantiate here
...
public static void main(String args[]) { ... } // calls load
...
public static void load(){...}
...
}
в качестве примечания, соглашения Java заключаются в том, что имена классов подобны ArrayNums
, а имена методов должны быть подобны load
или loadNums
.
Ответ №3:
вам нужно передать свой массив как параметр, потому что он выходит за рамки метода load .
LOAD(randomThirty);
public static void LOAD(int[] randomThirty)
{
// looping through to assign random values from 1 - 300
for (int i = 0; i < randomThirty.length(); i ) {
randomThirty[i] = (int)(Math.random() * 301);
}