【问题标题】:Creating an printing an object that stores strings and integers in java在java中创建一个存储字符串和整数的打印对象
【发布时间】:2021-01-18 13:26:34
【问题描述】:

我有以下问题。五个班级互相交流。两个主题都做得很好。但是随着在我的主类 Event 中创建一个类(Ticket)的对象(从另一个类(UserInput)获取用户输入,在 costructor 中处理它),我现在无法显示结果。

主类事件与主方法

import java.util.ArrayList;

public class Event {

    
    private static String artistName;
    private static int artistSalary;
    private Language language;
    private static ArrayList<String> trackList;
    private InputReader inputReader;
    private Ticket ticket;
    private int amountOfTicketCategories;
    private static Object[] ticketList;
    private static int index;
    
    
    
    public Event() {
        
    }
    
    public Event(Artist artist, Ticket ticket) {
        artistName = artist.getArtistName();
        artistSalary = artist.getArtistSalary();
        trackList = artist.getArrayList();
        for (index = 0; index < amountOfTicketCategories; index++) {
        ticketList[index] = ticket.getTicket();
        ticketList[index].toString();
        }
    }
    
    public void chooseWhatToDefine() {
        language = new Language();
        language.whatToSpecify();
    }


    public void setTicketPrice(String ticketCategory, int ticketPrice) {
    
    }
    
    public void displayArtist(String artistName, int artistSalary) {
        language = new Language();
        language.displayArtistAndSalary(artistName, artistSalary);
    }
    
    public void displayTracklist(ArrayList<String> trackList) {
        language = new Language();
        language.displayTrackList(trackList);
    }
    
    public void displayTickets(Object[] ticketList) {
        language = new Language();
        language.displayTicket(ticketList);
    }           
                        
public static void main(String[] args) {

        Event event1 = new Event(new Artist(), new Ticket());
    
        event1.displayArtist(artistName, artistSalary);
        event1.displayTracklist(trackList);
        event1.displayTickets(ticketList);
    
}
}

带有构造函数的 Ticket 类使用来自 InputReader 类的用户输入初始化该类,并创建一个字符串和整数对象。

import java.util.Arrays;

public class Ticket {

    
    private static String ticketCategory;
    private static int ticketAmount;
    private static int ticketPrice;
    private InputReader inputReader;
    private int amountOfTicketCategories;
    private int index;
    private Ticket[] ticketList;
    
    public Ticket(String ticketCategory,int ticketAmount,int ticketPrice) {
        
    }
    
    public Ticket() {
    inputReader = new InputReader();
    inputReader.specifyTicketCategories();
    ticketList = new Ticket[amountOfTicketCategories];
    for (index = 0; index < amountOfTicketCategories; index++) {
    inputReader.specifyTicket(ticketCategory, ticketAmount, ticketPrice);
    ticketList[index] = new Ticket(ticketCategory, ticketAmount, ticketPrice);
    
    
}
    }
    
public String toString() {
    return("TicketCategory: " + ticketCategory + "Amount of Tickets: " + ticketAmount + "Ticket Price: " +ticketPrice);
}

public Object getTicket() {
    return ticketList[index];
}

public int getAmountOfTicketCategories() {
    amountOfTicketCategories = inputReader.specifyTicketCategories();
    return amountOfTicketCategories;

    
    
}
}

处理用户输入的 InptReader 类:


import java.util.ArrayList;
import java.util.Scanner;

public class InputReader {

    private  Scanner sc;
    private  Language language;
    private  ArrayList <String> tracks;
    
    
    
    
    
    public InputReader() {
        tracks = new ArrayList<String>();
        language = new Language();
        sc = new Scanner(System.in);
        
        

    }

    public int specifyTicketCategories() {
        language.defineAmountOfTicketCategories();
        return sc.nextInt();
    
        
    }
    
    public void specifyTicket(String ticketCategory, int ticketAmount, int ticketPrice) {
        language.specifyTicketCategory();
        ticketCategory = sc.next();
        language.specifyTicketAmount();
        ticketAmount = sc.nextInt();
        language.specifyTicketPrice();
        ticketPrice = sc.nextInt();
        
    }
    
    public int amountOfTickets() {
        return sc.nextInt();
    }
    
    public int ticketPrice() {
        return sc.nextInt();
    }
    
    
    public String readName() {
        language.specifyArtist();
        return sc.nextLine();

    }

    public int readInteger() {
        language.specifyArtistSalary();
        return sc.nextInt();

    }

    public void addTitle() {
        int anzahlSongs = 3;
        int index = 0;
        while (index < anzahlSongs) {
            language.specifyTrackList();
            tracks.add(sc.nextLine());
            index++;
        }
    

}
    public  ArrayList<String> getArray() {
        return tracks;
    }

}

由语言语句组成的语言类

import java.util.ArrayList;

public class Language {
    
    public Language () {
    
        
    }

    public void whatToSpecify() {
        System.out.println("What would you like to specify fist? For Artist press 1, for Ticket press 2");
    }
    
    public void specifyArtist() {
    System.out.println("Who is the artist? ");
}


public void specifyArtistSalary() {
    System.out.println("How much does the artist earn? ");
}

public void displayTicket(Object[] ticketList) {
    System.out.println("Ticketlist: " + ticketList);
}
    
public void displayArtistAndSalary(String artistName, int artistSalary) {
    System.out.println("Artist: " + artistName + " " + "Salary: " + artistSalary);
}

public void displayTrackList(ArrayList<String> trackList) {
    System.out.println("Tracklist: " + trackList);
}

public void specifyTicketCategory() {
    System.out.println("What is the ticket category? ");
}

public void specifyTicketAmount() {
    System.out.println("What ist the amount of tickets? ");
}

public void specifyTicketPrice() {
    System.out.println("What is the price for your ticket?");
}

public void specifyTrackList() {
    System.out.println("Add title: ");
}

public void defineAmountOfTicketCategories() {
    System.out.println("How many ticket categories you like to set up?");
}

public void line() {
    System.out.println("***********************************");
}

}

在主类中创建艺术家实例的艺术家类(与票证相同)但具有其他变量和参数。

import java.util.ArrayList;

public class Artist {

    private int artistSalary;
    private String artistName;
    private InputReader inputReader;
    ArrayList <String> trackList;
    
    
    

    public Artist() {
        
        
        inputReader = new InputReader();
        artistName =    inputReader.readName();
        artistSalary = inputReader.readInteger();
        inputReader.addTitle();
        trackList = inputReader.getArray();
        trackList.remove(2);
        
            
    }

    public String getArtistName() {
        return artistName;

    }

    public int getArtistSalary() {
        return artistSalary;
    }

                
    
    public ArrayList<String> getArrayList(){
        return trackList;
    }

}

控制台输出: 添加标题: 你好 添加标题: 你好 您喜欢设置多少个门票类别? 5 艺术家:大卫薪水:5000 曲目列表:[,你好] 票务清单:空

【问题讨论】:

    标签: java arrays printing java.util.scanner


    【解决方案1】:

    首先,在 Ticket 类的构造函数中,您使用另一个构造函数(具有 3 个参数的构造函数),它的主体为空。

    ticketList[index] = new Ticket(ticketCategory, ticketAmount, ticketPrice);

    public Ticket(String ticketCategory,int ticketAmount,int ticketPrice) {
        //this is empty
    }
    

    这意味着您正在创建一个对象,其中没有任何内容(空变量)。

    试试这个:

    public Ticket(String ticketCategory,int ticketAmount,int ticketPrice) {
        this.ticketCategory = ticketCategory;
        this.ticketAmount = ticketAmount;
        this.ticketPrice = ticketPrice;
    }
    

    那么,您的 getTicket 方法是错误的。您永远不会在 Ticket 类中定义“索引”整数。

    public Object getTicket() {
        return ticketList[index];
    }
    

    其中“索引”未定义。

    ticketList 不应该在 Ticket class=> 每次创建 Ticket 实例时,它可能与之前的不一样。

    【讨论】:

    • 非常感谢。 ticketList 的问题在于它使用 InputReader,我在构造函数中创建了一个新的 TicketReader 实例。这就是为什么我不能在我猜的事件类中创建一个新的输入阅读器对象。
    • 有很多问题,我想你可以用更好的方式来做。提示:如果要创建对象列表,请不要将列表放在对象本身中,而应放在其他类中(例如 DataManager 具有ticketList、trackList、artist 等字段,带有getter 和setter)。然后,您可以在运行代码时在 main 方法中创建此类的一个实例。
    • 如果我这样做:public void specifyTicketCategories(int amountOfTicketCategories) { language.defineAmountOfTicketCategories(); amountOfTicketCategories = sc.nextInt();,在数据管理器类public void setAmountOfTicketCategories(int amountOfTicketCategories) { inputReader.specifyTicketCategories(amountOfTicketCategories); } public int getAmountOfTicketCategories(int amountOfTicketCategories) { return amountOfTicketCategories; } 中创建一个setter 和getter 是否正确?
    猜你喜欢
    • 2023-04-03
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多