我现在有2个班,第一个班里有arraylist。但是在我尝试访问arraylist的第二课时,它一直给我下面的红线说变量不存在。
这是第一课......
public class BankMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
BankMain main = new BankMain();
menu();
}
public static void cardNumbers(){
ArrayList<Integer> cardNum = new ArrayList<Integer>();
Scanner cards = new Scanner(System.in);
Scanner input = new Scanner(System.in);
Scanner keyboard = new Scanner(System.in);
System.out.println("Please select a 5 digit card number");
cardNum.add(input.nextInt());
System.out.println("Thank you! You're card number is " +cardNum);
System.out.println("Type 'c' to go back to main menu.");
String value = keyboard.next();
if(value.equalsIgnoreCase("c")){
menu();
}
else if (!keyboard.equals('c')){
System.out.println("Invalid Entry!");
}
}
public static void menu(){
System.out.println("What Would you like to do today?");
System.out.println();
System.out.println("Create Account = 1");
System.out.println("Login = 2");
System.out.println("Exit = 3");
query();
}
public static void query(){
Scanner keyboard = new Scanner(System.in);
double input = keyboard.nextInt();
if (input == 2){
BankMainPart2 main2 = new BankMainPart2();
System.out.println("Please enter your 5 digit card number.");
main2.loginCard();
}
else if (input == 1){
cardNumbers();
}
else if (input == 3){
System.out.println("Thank you, have a nice day!");
System.exit(0);
}
}
}
这是第二堂课......
public class BankMainPart2 {
public static void loginCard(){
if (cardNum.contains(name)) {
}
}
}
我知道我还没有在第二个类的if语句中输入任何内容,但我只是想让我的数组列表适用于这两个类。
答案 0 :(得分:0)
代码看起来很幼稚。对您的问题的一个非常简单的答案是
您尚未在BankMainPart2中将任何cardNum声明为全局变量,或者在loginCard中将其声明为本地变量,您认为它在loginCard方法中如何可用?
ArrayList<Integer> cardNum = new ArrayList<Integer>();
是cardNumbers方法的本地。
如何从其他课程中访问它?
- 编辑 -
正如您所要求的详细信息,让我快速概述一下不同的方法。
一步一步
从方法中取出变量并添加到类级别,请注意我从方法名称中删除了静态
public class BankMain {
private ArrayList<Integer> cardNum = new ArrayList<Integer>();
// rest of code as it is
..
..
BankMain main = new BankMain();
//change
main.menu();
//no need foe static
public void cardNumbers(){
//no need here now
//ArrayList<Integer> cardNum = new ArrayList<Integer>();
Scanner cards = new Scanner(System.in);
Scanner input = new Scanner(System.in);
..
..
//public static void menu(){
public void menu(){
//send the list
//I see there are confusion at times regarding calling of static method.
//please note objectname.staticMethod() or classname.staticMethod() is one
//and same thing. Just that classname.staticMethod() is more clear
BankMainPart2.loginCard(cardNum);
}
和
public class BankMainPart2 {
public static void loginCard(ArrayList<Integer> cardNum){
if (cardNum.contains(name)) {
}
}
}
答案 1 :(得分:0)
您的方法BankMainPart2.loginCard
没有“cardNum”的上下文,它不知道它是什么(类型或值)。
为了使该方法能够对数组列表起作用,您必须传递对它的引用,例如......
public class BankMainPart2 {
public static void loginCard(ArrayList<Integer> cardNum){
if (cardNum.contains(name)) {
}
}
}
答案 2 :(得分:0)
将cardnum arraylist作为BankMain类中的实例变量并在BankMainClass2中扩展BankMain并使用BankMain的引用,您将能够像这样访问cardNum
Class BankMain {
public ArrayList<String> cardNum = new ArrayList<String>();
}
Class BankMain2 extends BankMain {
public void method() {
BankMain2 main = new BankMain2();
sysout(main.cardNum.size());
}
}
但上述情况仅在BankMain类中的cardNum ArrayList标记为public,protected或default(Nomodifier)时才有效。如果它标记为私有和其他非访问修饰符,如静态和最终
,它将无法工作答案 3 :(得分:0)
您可以尝试其中任何一种
1.将Arraylist声明为public然后导入第一个类并在第二个类中使用cardNum
2.使cardNum成为静态var并直接在第二类中使用它作为BankMain.cardNum
3.将Arraylist作为第二类的参数。
答案 4 :(得分:0)
关键问题在于您尝试创建类的方式。您当前的问题可以通过@MadProgrammer给出的答案来解决。但是你应该明确地研究面向对象的编程概念。 How to identify and design a Class?
上的这一部分应该给你一些明确的指示。