Как вы убедитесь, что Java находит вашу переменную в разных методах?

#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); 
    }