【问题标题】:How do I make an object which hold a string, string array, and an int array in Java?如何在 Java 中创建一个包含字符串、字符串数组和 int 数组的对象?
【发布时间】:2017-05-19 03:25:57
【问题描述】:

我在弄清楚如何适当地制作一个不仅包含字符串和整数,而且还包含字符串数组和整数数组的对象时遇到了一些麻烦。我现在有这个

public class Gamebook {
    Section[] sections = new Section[6];
    String storyText;
    String[] choiceText;
    int[] choiceSections;

public Gamebook() { 
    storyText = "";
    choiceText = new String[1];
    choiceSections = int[];       
  }
}

如果我理解正确,这将创建一个 section 对象数组,其中 6 个,并允许我的 section 对象有一个 storyText 字符串、一个choiceText 字符串数组和一个choiceSections int 数组。

但是,这似乎是硬编码的,我需要能够阅读我拥有的 txt 文件,提取故事文本和其他必要信息,并将这些部分分配给每个部分对象。我发现几乎没有成功,并且觉得我可能缺乏对 Java 面向对象的理解,但是在 youtube 上观看了几个视频后,他们中的大多数人都没有处理具有多个属性的对象,而是那些自己手动设置的对象使用方法解析信息来填补“空白”。

【问题讨论】:

  • 你能发布你的部分声明
  • 是 Section(String, String[], int[])
  • 我推荐使用 ArrayList 但我仍然想知道你为什么使用类部分?这个类是否包含这三个属性,那么有什么问题

标签: java arrays string object


【解决方案1】:

使用 Araylist 它将存储您的所有对象查看此tutorial 它会帮助您或此one

【讨论】:

    【解决方案2】:

    这是一个你可以玩的例子。这使用列表而不是数组。您可以用数组替换列表,但您必须在构造函数中设置数组的大小。此外,添加数组会产生您必须处理的新问题。

    AlbumInfo 类:

    import java.util.*;
    
    /**
     *
     * @author Sedrick
     */
    public class AlbumInfo {
    
        private String albumName;
        private String artist;
        private List<String> tracksTitle;
        private List<String> tracksLength;
    
        public AlbumInfo()
        {
            albumName = "Add Album Name";
            artist = "Add Artist Name";
            tracksTitle = new ArrayList();
            tracksLength = new ArrayList();
        }
    
        /**
         * @return the albumName
         */
        public String getAlbumName()
        {
            return albumName;
        }
    
        /**
         * @param albumName the albumName to set
         */
        public void setAlbumName(String albumName)
        {
            this.albumName = albumName;
        }
    
        /**
         * @return the artist
         */
        public String getArtist()
        {
            return artist;
        }
    
        /**
         * @param artist the artist to set
         */
        public void setArtist(String artist)
        {
            this.artist = artist;
        }
    
        /**
         * @return the tracksTitle
         */
        public List<String> getTracksTitle()
        {
            return tracksTitle;
        }
    
        /**
         * @param tracksTitle the tracksTitle to set
         */
        public void addTrackTitle(String trackTitle)
        {
            this.tracksTitle.add(trackTitle);
        }
    
        /**
         * @return the tracksLength
         */
        public List<String> getTracksLength()
        {
            return tracksLength;
        }
    
        /**
         * @param tracksLength the tracksLength to set
         */
        public void addTrackLength(String trackLength)
        {
            this.tracksLength.add(trackLength);
        }
    
    }
    

    主要测试类:

    import java.util.*;
    
    /**
     *
     * @author Sedrick
     */
    public class AlbumTest {
    
        static final String[] trackTitles = {"Ambitionz Az a Ridah", "All Bout U", "Skandalouz", "Got My Mind Made Up", "How Do U Want It", "2 of Amerikaz Most Wanted", "No More Pain", "Heartz of Men", "Life Goes On", "Only God Can Judge Me", "Tradin' War Stories", "California Love(Remix)", "I Ain't Mad at Cha", "What'z Ya Phone #"};
    
        static final String[] trackLength = {"4:39", "4:37", "4:09", "5:14", "4:47", "4:07", "6:14", "4:43", "5:02", "4:57", "5:29", "6:25", "4:53", "5:10"};
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args)
        {
            // Add album info
            AlbumInfo allEyesOnMeDiscOne = new AlbumInfo();
            allEyesOnMeDiscOne.setAlbumName("All Eyes On Me");
            allEyesOnMeDiscOne.setArtist("Tupac");
            for (int i = 0; i < trackTitles.length; i++) {
                allEyesOnMeDiscOne.addTrackTitle(trackTitles[i]);
            }
    
            for (String entry : trackLength) {
                allEyesOnMeDiscOne.addTrackLength(entry);
            }
    
            //Print album info
            System.out.println("Album Name: " + allEyesOnMeDiscOne.getAlbumName());
            System.out.println("Album Artist: " + allEyesOnMeDiscOne.getArtist());
            List albumTitles = allEyesOnMeDiscOne.getTracksTitle();
            List albumTitlesLength = allEyesOnMeDiscOne.getTracksLength();
    
            for (int i = 0; i < albumTitles.size(); i++) {
                System.out.println("Title: " + albumTitles.get(i) + "  Length: " + albumTitlesLength.get(i));
            }
    
        }
    }
    

    【讨论】:

    • 这正是我正在寻找的故障!非常感谢!我是一个非常注重视觉的学习者,并且渴望获得更多的编码,一周前才开始并且进展顺利,但这将有助于一吨!
    【解决方案3】:

    数组的问题在于它们的大小是固定的。含义:写的时候需要知道元素个数

    someArray = new Whatever[... 
    

    这意味着:从文件中解析信息时,您有两个选择:

    • 从一个大的空数组开始,并跟踪您放入这些空槽的元素。当空间不足时,您可能必须将内容复制到更大的数组中。最后,您可以将条目复制到一个完美大小的数组中。
    • 您可以使用 Java List 和 ArrayList - 它们允许动态添加和删除元素。

    【讨论】:

    • 感谢您对数组部分的解释,但我更纠结于将所有这些属性添加到单个对象的概念。
    • 那么我没有得到您的完整问题。也许将部分类的相关部分添加到您的问题中会有所帮助。在任何情况下,属于一个节的所有事物都应该是节类中的字段。另一个类中不应有另一个数组,其中包含属于该部分的详细信息。
    猜你喜欢
    • 2019-06-06
    • 2016-09-23
    • 2016-01-17
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多