Как мне установить переменную из цикла в свой массив, а затем отобразить массив в другом классе?

#java #arrays #loops #class #methods

#java #массивы #циклы #класс #методы

Вопрос:

Добрый вечер, я снова борюсь… Я хочу, чтобы цикл из моего первого класса вычислял значение x, а затем помещал значение x в мой массив, а затем отображал массив в моем основном классе. В чем моя ошибка? Я был бы очень благодарен, если бы какой-либо совет мог решить эту проблему.

 import java.util.Arrays;

public class Data {
    public double for1() {

        double x = 2;
        for (int i = 0; i < 8; i  ) {
            x = x   x;
            
        }

        return x;
    }

    double[] arr = { x, 3, 4, 4, -5, 4, 6, 2 }; // x cannot be resolved to a variable
}
//-------------
import java.util.Arrays;

public class Javaapp {
    public static void main(String[] args) {

        Data a = new Data();
        a.for1();

        System.out.println(Arrays.toString(a.arr));
    }
}
  

Комментарии:

1. Как насчет double[] arr = { for1(), 3, 4, 4, -5, 4, 6, 2 }; ?

2. @Nick это должен быть ответ, лучшее решение

Ответ №1:

Одной из возможностей было бы вызвать for1 функцию в вашем назначении массива. Если вы это сделаете, вам не нужно будет вызывать ее в main подпрограмме:

 import java.util.Arrays;

class Data {
    public double for1() {

        double x = 2;
        for (int i = 0; i < 8; i  ) {
            x = x   x;
            
        }

        return x;
    }

    double[] arr = { for1(), 3, 4, 4, -5, 4, 6, 2 };
}

public class Main
{  
    public static void main(String args[])
    {
        Data a = new Data();

        System.out.println(Arrays.toString(a.arr));
    }
}
  

Ответ №2:

Проблема в том, что переменная x доступна только из метода for1() . Решением для этого было бы переместить переменную x за пределы метода или поместить x в массив после вызова метода.

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

 import java.util.Arrays;

class Data {
    public double for1() {
        double x = 2;
        for (int i = 0; i < 8; i  ) {
            x = x   x;
            
        }
     //we set the first index in the array to our new x variable
        arr[0] = x;
        return x;
    }
   //                v  place holder value for now
    double[] arr = { 2, 3, 4, 4, -5, 4, 6, 2 };
}

public class Main {
    public static void main(String[] args) {

        Data a = new Data();
        a.for1();

        System.out.println(Arrays.toString(a.arr));
    }
}
  

Комментарии:

1. Да, это простое и короткое решение моей проблемы. Большой: Спасибо.

Ответ №3:

Основная проблема здесь заключается в том, что переменная x недоступна для массива arr. Это потому, что x существует только в области действия функции for1() . Самые простые способы обойти это:

  1. Сделайте x глобальной переменной
 private double x = 2;
public void for1(){
    for (int i = 0; i < 8; i  ) {
        x = x   x;        
    }
}
double[] arr = { x, 3, 4, 4, -5, 4, 6, 2 };
  
  1. Сделайте for1() возвращающим x, как уже предлагало большинство людей
 public double for1(){
    double x = 2;
    for (int i = 0; i < 8; i  ) {
        x = x   x;        
    }
    return x;
}
double[] arr = { for1(), 3, 4, 4, -5, 4, 6, 2 };