【问题标题】:how can i access main variables in public void stock() function?如何访问 public void stock() 函数中的主要变量?
【发布时间】:2014-06-07 12:43:36
【问题描述】:

在方法void stock() 中,如何从方法main(); 访问变量int c;quan[c];objIn[c];

请告诉我如何在其他方法中访问在main 方法中声明的变量?

package inventry;

import java.util.Scanner;


public class Inventry {

public void Stock()
{


    System.out.println("-------------------------------");
  System.out.println("-------STOCK AVAILABLE---------");
  System.out.println("-------------------------------");

    for( int c=0;c<objIn.length;c++)
   {
      System.out.println(objIn[c]+"="+quan[c]);
   }

}


public static void main(String[] args)
{
    System.out.println("_____________________________");
     System.out.println("WELCOME TO INVENTRY SYSTEM");
    System.out.println("_____________________________");
    System.out.println("");
    System.out.println("PLEASE ENTER NO OF OBJECTS FOR INVENTRY=");
    Scanner Inp = new Scanner(System.in);
    int i,j,c;

   i=Inp.nextInt();

   Inp.nextLine();

   String objIn[]= new String[i];
   String quan[]= new String[i];


  System.out.println("PLEASE ENTER NAMES OF OBJECTS");
   for(j=0;j<objIn.length;j++)
   {
     System.out.println("OBJECT NO."+j+"=");
       objIn[j]=Inp.nextLine();
   }


  System.out.println("PLEASE ENTER QUANTITY OF OBJECTS");
   for(j=0;j<objIn.length;j++)
   {
     System.out.print(objIn[j]+"=");
       quan[j]=Inp.nextLine();
   }

}
}    

【问题讨论】:

  • 请将您的代码缩进四 (04) 个空格以使其显示为代码。
  • 将它们作为全局声明的参数提供。

标签: java function class


【解决方案1】:

stock() 需要访问的所有变量都可以通过参数列表发送,然后可以在 main() 内部调用方法 stock(),这些变量可以作为参数提供。但是,请注意您的 stock() 方法不是静态的,因此您需要创建 Inventry 类的对象。如果你没有实例化 Inventry 类,那么你应该将 stock() 声明为静态的。

Stock() 应声明为:

public static void Stock(int i, String objIn[], String quan[]){ ... }

并且应该在 main() 中调用为:

Stock(I, objIn, quan);

【讨论】:

  • 感谢您的回答,但请解释一下“非静态”和“实例化”是什么意思?
  • 这需要对 OOP 概念有基本的了解。非静态属性是与单个对象相关的对象的属性,而不是与类相关的属性。即每个对象都有自己的属性副本。例如对于 Student 类,学生的名字是一个实例属性,因为该类的每个对象(即每个学生)都应该有一个他/她自己的名字。同样,学生 ID、学生 GPA 等属性都是实例属性,而不是毕业所需的最低学分(美国大多数本科课程的最低学分是 120)。常用属性是静态的。
【解决方案2】:

您可以将此变量传递给方法Stock(),但为此您需要将此方法的签名更改为public void Stock(int i, String quan[], String objIn[])

然后,当您从 main 方法调用方法 Stock 时,您可以像 Stock(i, objIn, quan) 一样将您的变量传递给 Stock,但前提是您声明了此变量。

因为你的方法Stock不是static你需要创建类Inventry的实例并调用这个方法,例如:

Inventry invObject = new Inventry();
invObject.Stock(i, objIn, quan);

【讨论】:

  • 传递值并在 main() 中使用此函数 Stock(c,quan[],objIn[]);这是正确的方法吗??
  • @TSjahangiri。是的,因为当您需要访问另一个方法中的变量时,您需要将此变量传递给另一个方法,并且只有更改方法声明才能给您这个机会。
  • 请解释一下非静态是什么意思?
  • @TSjahangiri。静态意味着类的变量(字段)或方法不属于该类的实例。您可以调用此方法并使用变量,而无需创建类的实例。
【解决方案3】:

或者,您可以创建一个对象数组列表(库存项目),每个对象将是一个库存项目,并且会有一个数量。这样您就不需要创建并行数组,因为单个数组中的每个项目都是带有数量字段的库存项目。

public class Stock(){
    private String stockItem;
    private int quantity;

    public Stock(String itemNm, int intemQuant){
      this.stockItem = itemNm;
      this.quantity = itemQuant;
    }

    //insert relevant getters and setters.

回到主线:

Arraylist<Stock> stockList = new ArrayList<Stock>(numberOfItems);
for(int i = 0; stockList.size(); i++){
    System.out.println(stockList.get(i).getName());
    System.out.println(stockList.get(i).getQuantity());
}

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多