Java 如何在两个不同的类上使用一个数组
我现在有两个类,第一个类中有arraylist。但是在第二个类中,当我试图访问arraylist时,它一直给我下面的红线,表示变量不存在 这是一班Java 如何在两个不同的类上使用一个数组,java,arraylist,Java,Arraylist,我现在有两个类,第一个类中有arraylist。但是在第二个类中,当我试图访问arraylist时,它一直给我下面的红线,表示变量不存在 这是一班 public class BankMain { public static void main(String[] args) { // TODO Auto-generated method stub BankMain main = new BankMain(); menu(); }
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);
}
}
}
我知道我还没有在第二个类的if语句中输入任何内容,但我只是想让我的数组列表在这两个类上都工作。代码看起来很幼稚。对于你的问题,一个非常简单的答案是 您尚未在BankMainPart2中将任何cardNum声明为全局变量或在loginCard中声明为局部变量,您认为它在loginCard方法中如何可用
ArrayList<Integer> cardNum = new ArrayList<Integer>();
ArrayList cardNum=new ArrayList();
是CardNumber方法的局部
如何从其他类访问它
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);
}
公共类BankMain{
private ArrayList cardNum=new ArrayList();
//代码的其余部分保持原样
..
..
BankMain main=新的BankMain();
//改变
main.menu();
//不需要静电
公共卡号码(){
//现在不需要了
//ArrayList cardNum=新的ArrayList();
扫描仪卡=新扫描仪(System.in);
扫描仪输入=新扫描仪(System.in);
..
..
//公共静态无效菜单(){
公共无效菜单(){
//发送列表
//我看到在调用静态方法时有时会出现混乱。
//请注意objectname.staticMethod()或classname.staticMethod()就是其中之一
//同样,只是classname.staticMethod()更清晰
BankMainPart2.登录卡(cardNum);
}
及
公共类BankMainPart2{
公共静态无效登录卡(ArrayList cardNum){
if(cardNum.contains(name)){
}
}
}
您的方法,BankMainPart2.loginCard
没有“cardNum”的上下文,它不知道它是什么(类型或值)
为了使该方法能够作用于数组列表,必须传递对它的引用,例如
public class BankMainPart2 {
public static void loginCard(ArrayList<Integer> cardNum){
if (cardNum.contains(name)) {
}
}
}
公共类BankMainPart2{
公共静态无效登录卡(ArrayList cardNum){
if(cardNum.contains(name)){
}
}
}
将cardnum arraylist作为BankMain类中的实例变量,并在BankMain类2中扩展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类{
public ArrayList cardNum=new ArrayList();
}
BankMain2类扩展了BankMain{
公开作废法(){
BankMain2 main=新的BankMain2();
sysout(main.cardNum.size());
}
}
但上述场景仅在BankMain类中的cardNum ArrayList标记为public、protected或default(Nomodifier)时才起作用。如果其标记为private和其他非访问修饰符(如static和final),则不起作用。您可以尝试其中任何一种 1.将Arraylist声明为public,然后导入第一个类并在第二个类中使用cardNum 2.将cardNum设置为静态变量,并将其直接作为BankMain.cardNum在第二类中使用
3.将Arraylist作为参数传递给第二个类。关键问题在于您尝试创建类的方式。您当前的问题可以通过@MadProgrammer给出的答案来解决。但您应该明确了解面向对象编程的概念。本节将为您提供一些明确的指示。你到底想做什么?cardNum将是第一个类的私有类。单独的类不应该共享那样的内部数据。你需要再次检查OOP。我只是想在另一个类上放置更多的方法来拆分它们,我想将我的银行帐户登录方法放在单独的类中,但是当使用第二个类时,我会在第一个类中读取arraylist以检查arraylist中是否存在pin码。我正在构建一个ATM程序。@MattMcCarthy
Bank
是一种容器,在您的情况下,我会说,是一个“帐户”容器.Bank
应负责对试图访问任何帐户的任何用户进行身份验证,因为它是守门员,负责允许访问帐户。类似于Bank.getAccount(UserCredentials,accountNumber)
public class BankMainPart2 {
public static void loginCard(ArrayList<Integer> cardNum){
if (cardNum.contains(name)) {
}
}
}
Class BankMain {
public ArrayList<String> cardNum = new ArrayList<String>();
}
Class BankMain2 extends BankMain {
public void method() {
BankMain2 main = new BankMain2();
sysout(main.cardNum.size());
}
}