2

正如问题的标题所示,我想知道如何在方法之间共享数组值。我的主要目标是这个。我有一个方法,其中用户输入存储在一个数组中,然后这个方法基本上会检查用户输入值(验证过程)这样说(请忽略语法)

public void validation()
{
 String[] accnumbers = new String[20];
  Scanner sc = new Scanner(System.in);

  System.out.print("Enter the account number:");
    accno = sc.nextLine(); 

int j;
      for (j = 0; j < accnumber.length; j++)
      if (accnumber[j] == null) break;
      if (j==accnumber.length)  
      {
            System.out.print("limited.");
      } 
      else
      { 
          accnumber[j]=accno;               
      }

}

//所以这是针对vaidation部分的,你可以看到现在有一​​个accnumbers数组我想在下面的方法中分享它,它基本上搜索一个在字符串中有效的accnumber

public void search(String[] acnumbAry,BigDecimal[] acbalanceArray,String accnumbinput)
{
 if(Arrays.asList(acnumbAry).contains(accnumbinput))
       {
           System.out.println("The value is contained");
       }
       else
       {
           System.out.println("The value is not contained");
       }

}

// 但在 Main 方法中,我有一个显示菜单,为用户提供验证或搜索选项,因此当用户选择搜索时,我不确定如何从验证方法获取数组值(如果有) .

4

3 回答 3

0

我宁愿放在String[] acnumbAry类的成员列表中,并使用构造函数对其进行初始化。

在函数调用期间复制数组只会影响性能。

于 2012-08-20T12:59:25.740 回答
0

您可以在方法中返回数组:

public String[] validation()
{
  String[] accnumbers = new String[20];

  // your validation code

  return accnumbers;
}

但是,让我建议您对代码进行一些更改:

  • 您可以在验证之前填充数组,然后将其传递给您的validation方法。我也建议您将其称为validatebool validate(String[] values). 这对我来说会更直观,因为验证和接收数据通常是两件不同的事情。正如Anon所写,您可以将 存储accnumbers在实例字段中。
  • 当您contains在示例中使用时,最好使用 aSet而不是数组 or List,因为搜索集合通常更快。
于 2012-08-20T12:59:43.273 回答
0

不要使用数组!!!Java 不是 C!

除非您正在编写一些需要超快的低级代码,否则请使用 Collections API。如果这是家庭作业(我怀疑是)并且您的教授告诉您使用数组,请要求教务长在他造成更多伤害之前立即将他从教学中移除!对于几乎所有情况,数组都是一个糟糕的选择。

在这种情况下,请使用 a List,它会自动增大大小。无需检查大小等。然后从您的方法中返回列表。您的代码将缩小为:

public List<String> validation() {
    List<String> accnumbers = new ArrayList<String>();
    Scanner sc = new Scanner(System.in);

    System.out.print("Enter account numbers (blank to finish):");
    while (true) {
        String accno = sc.nextLine(); 
        if (accno.equals("")) { // blank ends input
            return accnumbers;
        }
        accnumbers.add(accno); // will take any number of account numbers
    }
}

您甚至不需要您的search方法,只需list.contains()在线使用即可。

于 2012-08-20T13:12:26.843 回答