【问题标题】:How to call array of object in a method inside the main class?如何在主类内的方法中调用对象数组?
【发布时间】:2021-02-26 09:19:09
【问题描述】:

我正在尝试在 searchByCompany() 方法中使用 IcecreamArray[] 来按公司名称打印冰淇淋信息,但它给了我一个错误数组不存在。

错误: 创建局部变量 IcecreamArray。另外,我怎样才能让我的代码更有效率?

public class MainIcecream {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Icecream[] IcecreamArray = new Icecream[5];
        for (int i = 0; i < 5; i++) {
            IcecreamArray[i] = new Icecream();
            System.out.println("Enter Icecream type " + i + " : ");
            IcecreamArray[i].setIcecreamType(sc.next());
            System.out.println("Enter Icecream Company " + i + " : ");
            IcecreamArray[i].setIcecreamCompany(sc.next());
            System.out.println("Enter Icecream Price " + i + " : ");
            IcecreamArray[i].setIcecreamPrice(sc.nextDouble());
        }

    public static void searchByCompany(String s){
        for (int i = 0; i < 5; i++) {
            if(s.equals(IcecreamArray[i].getIcecreamCompany())){
                System.out.println(IcecreamArray[i].getIcecreamType());
                System.out.println(IcecreamArray[i].getIcecreamCompany());
                System.out.println(IcecreamArray[i].getIcecreamPrice());
            } 
        }
    }

    public static class Icecream {

        private String icecreamType;
        private String icecreamCompany;
        private double icecreamPrice;

        public String toString(){
            String str , t , c;
            double p;
            t = icecreamType;
            c = icecreamCompany;
            p = icecreamPrice;
            str = "Icecream type: " + t + "\nManufacturer: " + c + "\nPrice: " + p;
            return str;
        }
        public void setIcecreamType(String t) {
            icecreamType = t;   
        }
        public void setIcecreamCompany(String c){
            icecreamCompany = c;
        }
        public void setIcecreamPrice(double p){
            icecreamPrice = p;
        }
        String getIcecreamType(){
            return icecreamType;
        }
        String getIcecreamCompany(){
            return icecreamCompany;
        }
        double getIcecreamPrice(){
            return icecreamPrice;
        }
    }
}

【问题讨论】:

    标签: java arrays oop object methods


    【解决方案1】:

    试试这样的。希望它能解决您的问题:----

    import java.util.Scanner;
    
    public class MainIcecream {
    
        
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            Icecream[] IcecreamArray = new Icecream[5];
            for (int i = 0; i < IcecreamArray.length; i++) {
                System.out.println("Enter Iceiceicecream Price " + i + " : ");
                double icecream_price = sc.nextDouble();
                System.out.println("Enter Icecream type " + i + " : ");
                String icecream_type = sc.next();
    
                System.out.println("Enter Icecream Company " + i + " : ");
                String icecream_company = sc.next();
                IcecreamArray[i] = new Icecream(icecream_type, icecream_company, icecream_price);
                
            }
            sc.nextLine();
            System.out.println("Enter Icecream Company  to retrieve all ");
            String icecreamCompany = sc.nextLine();
            searchByCompany(icecreamCompany, IcecreamArray);
            sc.close();
        }
    
        public static void searchByCompany(String s, Icecream[] icecreamArray) {
            boolean flag = false;
            for (int i = 0; i < icecreamArray.length; i++) {
    
                if (s.equals(icecreamArray[i].getIcecreamCompany())) {
                    flag = true;
                    System.out.println(icecreamArray[i].getIcecreamType());
                    System.out.println(icecreamArray[i].getIcecreamCompany());
                    System.out.println(icecreamArray[i].getIcecreamPrice());
                }
            }
            if (!flag) {
                System.out.println("record not found");
            }
    
        }
    
        public static class Icecream {
    
            private String icecreamType;
            private String icecreamCompany;
            private double icecreamPrice;
    
            public Icecream(String icecream_type, String icecream_company, double icecream_price) {
                this.icecreamType = icecream_type;
                this.icecreamCompany = icecream_company;
                this.icecreamPrice = icecream_price;
            }
    
            public String toString() {
                String str, t, c;
                double p;
                t = icecreamType;
                c = icecreamCompany;
                p = icecreamPrice;
                str = "Icecream type: " + t + "\nManufacturer: " + c + "\nPrice: " + p;
                return str;
            }
    
            public void setIcecreamType(String t) {
                icecreamType = t;
            }
    
            public void setIcecreamCompany(String c) {
                icecreamCompany = c;
            }
    
            public void setIcecreamPrice(double p) {
                icecreamPrice = p;
            }
    
            String getIcecreamType() {
                return icecreamType;
            }
    
            String getIcecreamCompany() {
                return icecreamCompany;
            }
    
            double getIcecreamPrice() {
                return icecreamPrice;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我通过将 IcecreamArray 作为参数传递给 searchByCompany 来修复代码。

      这是最终代码:

      public class MainIcecream {
      
          /**
           * @param args the command line arguments
           */
          public static void main(String[] args) {
              Scanner sc = new Scanner(System.in);
              Icecream[] IcecreamArray = new Icecream[5];
              for (int i = 0; i < 5; i++) {
                  IcecreamArray[i] = new Icecream();
                  System.out.println("Enter Icecream type " + i + " : ");
                  IcecreamArray[i].setIcecreamType(sc.next());
                  System.out.println("Enter Icecream Company " + i + " : ");
                  IcecreamArray[i].setIcecreamCompany(sc.next());
                  System.out.println("Enter Icecream Price " + i + " : ");
                  IcecreamArray[i].setIcecreamPrice(sc.nextDouble());
              }
      }
          public static void searchByCompany(Icecream IcecreamArray[]) {
              System.out.println("Enter manufacturer to search for icecream information: ");
              Scanner sc = new Scanner(System.in);
              String s = sc.nextLine();
              for (int i = 0; i < 5; i++) {
                  if (s.equals(IcecreamArray[i].getIcecreamCompany())) {
                      System.out.println("Icecream Type: " + IcecreamArray[i].getIcecreamType());
                      System.out.println("Icecream Company: " + IcecreamArray[i].getIcecreamCompany());
                      System.out.println("Icecream Price: $" + IcecreamArray[i].getIcecreamPrice());
                  }
              }
          }
          public static class Icecream {
      
              private String icecreamType;
              private String icecreamCompany;
              private double icecreamPrice;
      
              public String toString(){
                  String str , t , c;
                  double p;
                  t = icecreamType;
                  c = icecreamCompany;
                  p = icecreamPrice;
                  str = "Icecream type: " + t + "\nManufacturer: " + c + "\nPrice: " + p;
                  return str;
              }
              public void setIcecreamType(String t) {
                  icecreamType = t;   
              }
              public void setIcecreamCompany(String c){
                  icecreamCompany = c;
              }
              public void setIcecreamPrice(double p){
                  icecreamPrice = p;
              }
              String getIcecreamType(){
                  return icecreamType;
              }
              String getIcecreamCompany(){
                  return icecreamCompany;
              }
              double getIcecreamPrice(){
                  return icecreamPrice;
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        您已在 main 方法内声明并初始化 IcecreamArray,因此 main IcecreamArray 外部不存在。

        您可以将 IcecreamArray 作为参数传递给 searchByCompany,或者在 main 之外将其声明为静态变量

        我仔细查看了您的代码,您尝试在 main 中声明 searchByCompany 无效。您不能在另一个方法中声明一个方法。下面我提供了一个你可以做什么的例子

        public class MainIcecream {
        
            private static Icecream[] IcecreamArray = new Icecream[5];
        
            public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
        
                for (int i = 0; i < 5; i++) {
                    IcecreamArray[i] = new Icecream();
                    System.out.println("Enter Icecream type " + i + " : ");
                    IcecreamArray[i].setIcecreamType(sc.next());
                    System.out.println("Enter Icecream Company " + i + " : ");
                    IcecreamArray[i].setIcecreamCompany(sc.next());
                    System.out.println("Enter Icecream Price " + i + " : ");
                    IcecreamArray[i].setIcecreamPrice(sc.nextDouble());
                }
        
                System.out.println("Enter company name to search");
                searchByCompany(sc.next());
            }
        
            private static void searchByCompany(String s) {
                for (int i = 0; i < 5; i++) {
                    if (s.equals(IcecreamArray[i].getIcecreamCompany())) {
                        System.out.println(IcecreamArray[i].getIcecreamType());
                        System.out.println(IcecreamArray[i].getIcecreamCompany());
                        System.out.println(IcecreamArray[i].getIcecreamPrice());
                    }
                }
            }
        }
        

        【讨论】:

        • 你能指导我怎么做吗?我是 OOP 的新手
        • 谢谢。我没有在方法中创建方法。我在语法上犯了一个错误。
        【解决方案4】:

        您的程序有一些编译器错误。除此之外,IcecreamArraymain 方法内初始化,它的作用域在该方法内。它对其他方法不可见,因为它不存在于它们的上下文中。

        这是您的选择,

        1. 将数组作为参数传递给searchByCompany 方法,所以 searchByCompany(String s, Icecream[] array)

        2. 使数组成为类的字段,以便其他人可以访问它 方法(在这种情况下使其成为静态字段),所以public static Icecream[] IcecreamArray = new Icecream[5];

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-13
          相关资源
          最近更新 更多