我的简单程序会要求用户输入几个城市。用户应该能够通过选择其他选项将其打印出来。
现在我在方法( 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
}
}
}
答案 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
}
}
}