如何在不使这些变量全局的情况下在两种不同的方法中使用相同的变量?

时间:2015-01-13 13:18:30

标签: java arrays methods input global-variables

我的简单程序会要求用户输入几个城市。用户应该能够通过选择其他选项将其打印出来。

现在我在方法( city(); )中声明了一个数组来存储这些值。我有两种不同的方法,分别用于询问用户将它们打印出来(它将在主类中调用)。如果我想打印出数组(printCity()方法中的),它必须使用另一种方法(city();)中使用的varibale。因此,printCity()方法显示它无法找到变量的错误。此外,将这些变量声明为Global(在方法之外)并不适用于我的情况( 不知道为什么)。 那么,我该如何解决这个问题,以便相同的变量在两种不同的方法中起作用?

我的代码: 主要课程:

    package city;

import java.util.*;

public class City {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        UserInput ui = new UserInput();

        System.out.println("                THIS PROGRAM WILL TELL YOU THE CITY YOU HAVE EVER TRAVELLED\n"
                + "                          Choose one of the following option\n\n"
                + "                           You must enter city name before printing them out!");

        System.out.println("1. Enter the cities you have travelled\n"
                + "2. Print out the cities\n"
                + "3. Exit\n"
                + "....................\n"
                + "....................");

        while (true) {

            int userChoose = input.nextInt();

            switch (userChoose) {

                case 1:
                    //call method where the program asks to enter city name
                    ui.city();
                    break;
                case 2:
                    //call method where the program prints out the city name   

                    ui.printCity();
                    break;
                case 3:
                    System.exit(0);
                default:
                    System.out.println("Invalid input! Plz try again: ");
            }

        }

    }

}

UserInput类:

    package city;

import java.util.*;

public class UserInput {

    Scanner inScanner = new Scanner(System.in);

    public void city() {
        System.out.println("How many favourite city you have in your list?");
          int numOfCity = inScanner.nextInt();
        String[] cityInArr = new String[numOfCity];

        for (int i = 0; i < numOfCity; i++) {
            System.out.println("City " + (i + 1) + ": ");
            cityInArr[i] = inScanner.next();

        }
        System.out.println("YOU ARE DONE! NOW PRINT THEM OUT");

    }

    public void printCity() {


        System.out.println("");
        System.out.println("These are your favorite cities: ");
        for (int j = 0; j < numOfCity; j++) {//has an error
            System.out.printf("%s ", cityInArr);//has an error

        }


    }
}

3 个答案:

答案 0 :(得分:1)

听起来您的city()方法应该返回城市数组,然后您可以将其传递给printCity()方法:

public String[] city() {
    ...
    return cityInArr;
}

public void printCity(String[] cities) {
    ...
}

在你的主叫代码中:

String[] cities = {}; // Empty until fetched

...
cities = ui.city();
...
ui.printCity(cities);

我还强烈建议您重温您的命名。例如,getFavoriteCities()displayCities()会更合适,IMO。

答案 1 :(得分:0)

您需要将其作为方法参数传递。

public void printCity(String[] cityInArr, int numOfCity) {


        System.out.println("");
        System.out.println("These are your favorite cities: ");
        for (int j = 0; j < numOfCity; j++) {//has an error
            System.out.printf("%s ", cityInArr);//has an error

        }

然后像这样称呼它

   public static void main(String[] args) {
     .......
     printCity(cityArray, numOfCity);
     ........
    }

答案 2 :(得分:0)

假设通过'global',你的意思是将它们声明为UserInput类的一个字段(如果你的意思是别的话,请纠正我),我不明白为什么你不想这样做。

考虑到您在同一个类的同一个实例的两个方法之间共享数据,一个字段正好您需要的...

我冒昧地重写你的UserInput类,让数组作为一个字段(主类不变)。另请注意,您无需传递城市数量,因为它取决于数组的长度。

public class UserInput {
    private String[] cityInArr;

    public void city() {
        System.out.println("How many favourite city you have in your list?");
        Scanner inScanner = new Scanner(System.in);
        int numOfCity = inScanner.nextInt();
        cityInArr = new String[numOfCity];

        for (int i = 0; i < numOfCity; i++) {
            System.out.println("City " + (i + 1) + ": ");
            cityInArr[i] = inScanner.next();
        }
        System.out.println("YOU ARE DONE! NOW PRINT THEM OUT");
    }

    public void printCity() {
        System.out.println("\nThese are your favorite cities: ");
        for (int j = 0; j < cityInArr.length; j++) {//has an error
            System.out.printf("%s ", cityInArr[j]);//has an error
        }
    }
}