Как изменять переменные из функции main в других функциях?

188
27 июля 2021, 21:10
class Main1{
public static void main(String[] args){
    int one = 1;
    int two = 2;
    one_to_two(two);
    System.out.print(one + " " + two);
}
public static void one_to_two(int two){
    int one = two;
}
}

Хочу, чтобы переменная one приняла значение two в теле не основной функции. В с++ на это есть указатели. А как это сделать в Java?

Answer 1

В Java нет указателей. Такой трюк не получится. Все примитивы можно сказать что дублируются при передаче их в качестве параметров. Они находятся в стэке исполнения и менять их можно только на их уровне стэка

Answer 2

Это можно сделать следующим образом:

class Main1 {
    static int one;
    public static void main(String[] args){
        one = 1;
        int two = 2;
        one_to_two(two);
        System.out.print(one + " " + two);
    }
    public static void one_to_two(int two){
        one = two;
    }
}

То есть переменную one нужно вынести в область видимости, доступную для обоих методов.

Answer 3

Напрямую - никак. Локальные переменные, объявленные в одной функции только в ней и видны, указателей в java нет. Но можно сделать опосредованно.

1) Через массивы

public static void one_to_two(int[] data, int two){
    data[0] = two;
}
public static void main(String[] args){
    int[] one = new int[0];
    int two = 2;
    one_to_two(one, two);
    System.out.print(one[0] + " " + two);
}

2) Через вспомогательные классы

class Main1{
    class DataHolder {
       int one;
    }
    public static void one_to_two(DataHolder data, int two){
        int one = two;
    }
    public static void main(String[] args){
        DataHolder data = new DataHolder();
        data.one = 1;
        int two = 2;
        one_to_two(data, two);
        System.out.print(data.one + " " + two);
    }
}
READ ALSO
Фрагменты ViewPager в фрагментах BottomNavigationView

Фрагменты ViewPager в фрагментах BottomNavigationView

В общем, есть фрагмент HomeFragment, который выбирается с помощью BottomNavigationViewВ этом фрагменте есть еще два фрагмента TabLayout\ViewPager фильмы и сериалы

274
void is an invalid type for the variable deleteLine

void is an invalid type for the variable deleteLine

Написал программу которая удаляет определенную строку из файла,но что-то не пашет

282
как присвоить переменной значение из таблицы msyql

как присвоить переменной значение из таблицы msyql

у меня есть подключенная таблица из Mysql в проект java, мне нужно вывыести сумму значений в таблице, простым запросом в mysql я бы выполнил "select...

240