0
votes

Comment appeler un tableau d'objets dans une méthode à l'intérieur de la classe principale?

J'essaie d'utiliser IcecreamArray [] dans la méthode searchByCompany () pour imprimer les informations sur la crème glacée par son nom de société, mais cela me donne une erreur indiquant que le tableau n'existe pas.

Erreur: créez la variable locale IcecreamArray. Aussi, comment puis-je rendre mon code plus efficace?

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;
        }
    }
}


0 commentaires

4 Réponses :


1
votes

Vous avez déclaré et initialisé IcecreamArray à l'intérieur de la méthode main donc en dehors de IcecreamArray principal n'existe pas.

Vous pouvez passer IcecreamArray comme argument à searchByCompany ou bien le déclarer en dehors de main comme une variable statique

J'ai examiné de plus près votre code et vous avez essayé de déclarer searchByCompany à l'intérieur de main qui n'est pas valide. Vous ne pouvez pas déclarer une méthode dans une autre méthode. Ci-dessous, j'ai inclus un exemple de ce que vous pourriez faire

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());
            }
        }
    }
}


2 commentaires

Pouvez-vous me guider comment puis-je faire cela? Je suis nouveau dans la POO


Merci. Je n'ai pas créé de méthode à l'intérieur d'une méthode. J'ai fait une erreur dans la syntaxe.



0
votes

J'ai corrigé le code en passant IcecreamArray comme argument à searchByCompany.

Voici le code final:

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;
        }
    }
}


0 commentaires

0
votes

Votre programme contient des erreurs de compilation. En dehors de cela, IcecreamArray est initialisé dans la méthode main et sa portée se trouve à l'intérieur de cette méthode. Ce n'est pas visible pour les autres méthodes car il n'existe pas dans leur contexte.

Voici vos options,

  1. Passez le tableau comme argument à la méthode searchByCompany , donc searchByCompany(String s, Icecream[] array)

  2. Faites du tableau un champ de la classe pour qu'il soit accessible par d'autres méthodes (dans ce cas, faites-en un champ statique), donc public static Icecream[] IcecreamArray = new Icecream[5];


0 commentaires

0
votes

essayez quelque chose comme ça. espérons que cela résoudra votre problème: ----

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;
        }
    }
}


0 commentaires