Java — Не удается создать объект. Получение сообщения об ошибке: «Объект не может быть преобразован в тип»

#java #database #class #object #verification

Вопрос:

Новый программист, изучающий Java. У меня есть задание, в котором я должен создать своего рода базу данных для хранения информации о потребителях. На данный момент я построил два класса. Сам класс потребителей и второй, отдельный класс с основным методом. Я все еще разрабатываю программу, но столкнулся с чем-то, что, кажется, просто не могу пройти. Моя программа не позволит мне создавать какие — либо объекты класса Consumer. Пожалуйста, помогите, если у кого-нибудь есть шанс.

Код потребительского класса:

 import java.lang.Enum;

public class Consumer {
    
    private String name;
    private int streetNumber;
    private String streetName;
    private String city;
    private String postalCode;
    private int age;
    private String gender;
    private static int numConsumers;
    

    
    public Consumer(String name) {
        numConsumers  ;
        this.name = name;
        this.streetNumber = 0;
        this.streetName = " ";
        this.city = " ";
        this.postalCode = " ";
        this.age = 0;
        this.gender = " ";
        MaritalStatus maritalStatus = MaritalStatus.SINGLE;
        Education education = Education.HIGH_SCHOOL;
    }
    
    public enum MaritalStatus {
        SINGLE,
        COMMON_LAW,
        MARRIED,
        SEPARATED,
        DIVORCED,
        WIDOWED
    }
    
    public enum Education {
        HIGH_SCHOOL,
        COLLEGE,
        UNIVERSITY,
        NONE
    }
    
    public void setName(String newName) {
        name = newName;
    }
    
    public String getName() {
        return name;
    }
    
    public void setStreetNumber (int n) {
        streetNumber = n;
    }
    
    public int getStreetNumber() {
        return streetNumber;
    }
    
    public void setStreetName(String newStreetName) {
        streetName = newStreetName;
    }
    
    public String getStreetName() {
        return streetName;
    }
    
    public void setCity(String newCity) {
        city = newCity;
    }
    
    public String getCity() {
        return city;
    }
    
    public void setPostalCode(String newPostalCode) {
        postalCode = newPostalCode;
    }
    
    public String getPostalCode() {
        return postalCode;
    }
    
    public void setAge (int n) {
        age = n;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setGender(String newGender) {
        gender = newGender;
    }
    
    public String getGender() {
        return gender;
    }
    
    public String toString() {
        System.out.println();
        System.out.println("Displaying information for consumer "   name);
        System.out.println("Address: "   streetNumber   " "   streetName   ", "   city   ", "   postalCode);
        System.out.println("Age: "   age);
        System.out.println("Gender: "   gender);
        System.out.println("Marital status: "   MaritalStatus.class);
        System.out.println("Education level: "   Education.class);
        return " ";
    }
    
    public static String menu() {
        System.out.println("What do you want to do?");
        System.out.println("t 1. Enter a new Consumer (password required)");
        System.out.println("t 2. Change all information of a Consumer (password required)");
        System.out.println("t 3. Display all Consumers similar to a given consumer");
        System.out.println("t 4. Display all Consumers with a given age and location");
        System.out.println("t 5. Quit");
        System.out.println("Please enter your choice > ");
        return " ";
    }
    
    public static int getNumConsumers() {
        return numConsumers;
    }
    

}

 

и код из моего основного класса/метода

 import java.util.Scanner;

public class Capitalism {
    
    private static boolean validatedPassword;
    private static String correctPassword = "password";
    private static String passwordGuess;
    private static int passwordAttempts;
    private static int totalPasswordAttempts;
    private static int maxNumConsumers;
    private static int userMenuChoice;
    
    static int getMaxConsumers() {
        
        Scanner userInput = new Scanner(System.in); 
        System.out.println("Please enter the maximum number of consumers your company can handle");
        
        do {
            if(userInput.hasNextInt()) {
                maxNumConsumers = userInput.nextInt();
                if(maxNumConsumers <= 0) {
                    System.out.println("Invalid input. Please enter a positive number");
                }
            } else {
                System.out.println("Invalid input. Please enter a positive number (1, 8, 15, etc).");
                userInput.nextLine();
            }
        } while (maxNumConsumers <= 0);
        
        System.out.println("Your company can handle "   maxNumConsumers   " consumers.n");
        return maxNumConsumers;
    }
    
    static void menu() {
        
        System.out.println("What do you want to do?");
        System.out.println("t 1. Enter a new Consumer (password required)");
        System.out.println("t 2. Change all information of a Consumer (password required)");
        System.out.println("t 3. Display all Consumers similar to a given consumer");
        System.out.println("t 4. Display all Consumers with a given age and location");
        System.out.println("t 5. Quit");
        System.out.println("Please enter your choice > ");
        
    }
    
    static int getUserMenuChoice() {
        Scanner userInput = new Scanner(System.in); 
        
        do {
            if(userInput.hasNextInt()) {
                userMenuChoice = userInput.nextInt();
                if(userMenuChoice <= 0 || userMenuChoice >= 6) {
                    System.out.println("Invalid input. Please enter a number between 1 and 5.");
                }
            } else {
                System.out.println("Invalid input. User must enter a number with no letters (i.e. 4 instead of four).");
                userInput.nextLine();
            }
        } while (userMenuChoice <= 0 || userMenuChoice >=6);
        
        System.out.println("You have selected option "   userMenuChoice   ".n");
        return userMenuChoice;
    }

    static void validatePassword() {
        while (!validatedPassword amp;amp; passwordAttempts < 3) {
            System.out.println("Please enter your password.");
            Scanner userInput = new Scanner(System.in);
            passwordGuess = userInput.next();
            if (passwordGuess.equals(correctPassword)) {
                System.out.println("Correct password. Okay to proceed.");
                validatedPassword = true;
                break;
            } else if (passwordAttempts < 2) {
                System.out.println("Incorrect password. Max of 3 attempts before returning to main menu.");
                passwordAttempts  ;
                totalPasswordAttempts  ;
            } else {
                passwordAttempts = 0;
                totalPasswordAttempts  ;
                if (totalPasswordAttempts == 12) {
                    System.out.println("Program has detected suspicious activity and will terminate immediately.");
                    System.exit(0);
                }
                System.out.println("Maximum number of attempts reached. Returning to main menu.");
                break;
            }   
        }
    }
    
    static void validatePassword2() {
        while (!validatedPassword amp;amp; passwordAttempts < 3) {
            System.out.println("Please enter your password.");
            Scanner userInput = new Scanner(System.in);
            passwordGuess = userInput.next();
            if (passwordGuess.equals(correctPassword)) {
                System.out.println("Correct password. Okay to proceed.");
                validatedPassword = true;
                break;
            } else if (passwordAttempts < 2) {
                System.out.println("Incorrect password. Max of 3 attempts.");
                passwordAttempts  ;
                totalPasswordAttempts  ;
            } else {
                System.out.println("Program terminated due to safety reasons.");
                System.exit(0);
            }   
        }
    }
    
    public static void main(String[] args) {
        
        Consumer consumerOne = new Consumer(); // this is the line where the error message comes up
        
        boolean runProgram = true;
        System.out.println("Welcome to the consumer information database. A place to store and update consumer information. n");

        getMaxConsumers();
        
        while(runProgram) {
            menu();
            getUserMenuChoice();
            
            switch(userMenuChoice) {
            case 1:
                validatePassword();
                System.out.println("Then we continue the rest of this nonesense");
                break;
            case 2:
                validatePassword2();
                break;
            case 3:
            case 4:
            case 5:
                runProgram = false;
                break;
            }
        
        }
        
        System.out.println("Thank you for using the database. May all your capitalist dreams come true.");
        System.out.println("Program is now terminated.");

        }

    

}
 

Комментарии:

1. Обратите внимание, что вам не нужно ничего импортировать из java.lang .

Ответ №1:

Вы пытаетесь создать экземпляр класса Consumer с помощью конструктора Consumer (), который не определен.

Единственный конструктор, который вы определили, — это Потребитель(строковое имя).

Вам необходимо добавить конструктор по умолчанию в свой потребительский класс:

  public Consumer() {
    numConsumers  ;
    this.name = "Undefined"; //Or just set it to null
    this.streetNumber = 0;
    this.streetName = " ";
    this.city = " ";
    this.postalCode = " ";
    this.age = 0;
    this.gender = " ";
    MaritalStatus maritalStatus = MaritalStatus.SINGLE;
    Education education = Education.HIGH_SCHOOL;
}
 

Комментарии:

1. Спасибо вам за помощь! Я попробую это и посмотрю, какой из них я предпочитаю продвигать в этом проекте 🙂

Ответ №2:

В вашем классе Consumer есть только один конструктор с одним обязательным строковым параметром public Consumer(String name) , но main вы ничего не передаете конструктору.

Тебе следует написать

 Consumer consumerOne = new Consumer("John");
 

Комментарии:

1. Я попробовал это, и это сработало! Я получил два других ответа с вариантами моей программы. Я попробую их и посмотрю, какой из них мне больше нравится. Спасибо вам за вашу помощь. 🙂

2. @Стивен, если это решило вашу проблему, вы можете поставить галочку рядом с ней.