简体   繁体   English

为什么我不能创建一个类? 我正在尝试使用 Animal 数组来容纳不同的动物

[英]Any reason why I can't create a class? I'm trying to have a Animal array to hold different animals

I am trying to create a animal array to try and hold the information of different types of animals/owners.我正在尝试创建一个动物数组来尝试保存不同类型的动物/所有者的信息。 Been trying to solve this for 2 hours reading the book but nothing is working.一直试图解决这个问题阅读了 2 个小时,但没有任何效果。 Can anyone point me to the right direction?任何人都可以指出我正确的方向吗? Also how would I go about importing information from a URL to a array?另外我将如何将信息从 URL 导入数组?

import java.net.URL;
import java.math.BigInteger; 
import java.net.URL; 
import java.net.HttpURLConnection;
import static java.util.Arrays.sort;
public  class janesj_Program5 {
    public static void main(String[] args) {
        Animal[] j = new Animal[1];
        storeFile(j);
        sort(j);
        printArray(j);
    }
    public  static  class Animal {
        String OwnerName;
        int birthYear;
        public int billBalance;
        String Species;
        String feature;
        public  Animal() {}
        public Animal(String OwnerName,int birthYear,int billBalance,String Species,String feature) {
            this.OwnerName = OwnerName;
            this.birthYear = birthYear;
            this.billBalance = billBalance;
            this.Species = Species;
            this.feature = feature;
        }


        public int getBalance() {
            return billBalance;
        }
        public String toString() {
            return OwnerName + "\t" + birthYear + "\t" + getBalance() + "\t" + Species + "\t" + feature;
        }

        }
    public static void storeFile(Animal[] x) {
    String URLString = "http://yoda.kean.edu/~pawang/CPS2231/Program5_veterinarian_input.txt";
    try {
        java.net.URL url = new java.net.URL(URLString);
        int count = 0;
        Scanner input = new Scanner(url.openStream());
        while(input.hasNext()) {
            String line = input.nextLine();
            count+= line.length();
            x = new Animal[count];
        }
    }catch(java.net.MalformedURLException ex){
        System.out.println("Invalid URL");
    }
    catch(java.io.IOException ex) {
        System.out.println("I/O Errors: no such file");
    }

        }
    public static class sorts extends Animal implements Comparator<Animal> {
        public int compare(Animal a, Animal b) {
            return a.getBalance() - b.getBalance();
        }

    }
    public static void printArray(Animal[] x) {
        System.out.println("\t Veterinarian Services Report \t Page:1");
        System.out.println("    ==================================");
        System.out.println("No\tOwner Name\tYear\tBalance\tSpecies\tLegs\tFeature");
        System.out.println("== ====================  ==== ============ ============ ============");
        for(int i = 1; i<=x.length;i++) {
            System.out.println(i + "  " + x.toString());
        }
    }
        }




As so kindly pointed out by MTilsted you really should have your Animal class within its own .java file.正如MTilsted所指出的那样,你真的应该在它自己的.java文件中拥有你的 Animal 类。

If you plan to create an array of Animal objects where the data to fill those objects is coming from a data file then you need to realize that arrays are of a fixed size, they can't just grow on a whim (at least not without more coding).如果您计划创建一个 Animal 对象数组,其中填充这些对象的数据来自数据文件,那么您需要意识到数组的大小是固定的,它们不能随心所欲地增长(至少不是没有更多编码)。 You would need to know how may animals are contained within the data file so as to properly size your Animal array.您需要知道数据文件中如何包含动物,以便正确调整 Animal 数组的大小。 Your in luck, by the look of it your data file contains the number of animals within the first line of the file (which needs to be ignored when reading in the actual animal data).您很幸运,从外观上看,您的数据文件包含文件第一行中的动物数量(在读取实际动物数据时需要忽略)。

First, make sure the file actually exist.首先,确保文件确实存在。 No sense going through heartache if it's not even there or there is something wrong with the connection to its' location.如果它甚至不存在或者与其位置的连接有问题,那么心痛是没有意义的。 Once done, you can declare and initialize your Animals array to the proper size so as to handle all the data rows you are about to re-read into the array.完成后,您可以声明您的 Animals 数组并将其初始化为适当的大小,以便处理您将要重新读入该数组的所有数据行。

Below is your code to demonstrate how this can be accomplished.下面是您的代码,用于演示如何实现这一点。

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;


public class AnimalCare {

    static Animals[] animals;  // Declare The Anmimal Array as a class member variable

    public static void main(String[] args) {
        try {
            URL url = new URL("http://yoda.kean.edu/~pawang/CPS2231/Program5_veterinarian_input.txt");
            int lines = 0;
            // Get the number of lines in file 
            try (Scanner s = new Scanner(url.openStream())) {
                String firstFileLine = "";
                while (firstFileLine.equals("")) {
                    firstFileLine = s.nextLine().trim();
                    if (!firstFileLine.equals("")) {
                        lines = Integer.parseInt(firstFileLine);
                    }
                }
            }
            catch (IOException ex) {
                String msg = "";
                if (!ex.getMessage().equals(url.toString())) {
                    msg = "No Network Connection!";
                }
                else {
                    msg = "File Not Found! - " + ex.getMessage();
                }
                System.err.println(msg);
            }

            // Declare our Animals Array.
            animals = new Animals[lines];

            // Re-read the data file on network...
            try (Scanner s = new Scanner(url.openStream())) {
                int i = 0;
                String dataLine;
                s.nextLine(); // Skip the first line of file!
                while (s.hasNextLine()) {
                    dataLine = s.nextLine().trim();
                    // Skip blank lines (if any)
                    if (dataLine.equals("")) {
                        continue;
                    }
                    String[] dataParts = dataLine.split("\\s+");
                    animals[i] = new Animals(dataParts[0], 
                                    Integer.parseInt(dataParts[1]), 
                                    Integer.parseInt(dataParts[2]), 
                                    dataParts[3], 
                                    dataParts[4]);
                    i++; // Increment i to create the next index value for array
                }
                // The Animals array is now filled with network file data
            }
            catch (IOException ex) {
                String msg = "";
                if (!ex.getMessage().equals(url.toString())) {
                    msg = "No Network Connection!";
                }
                else {
                    msg = "File Not Found! - " + ex.getMessage();
                }
                System.err.println(msg);
            }
        }
        catch (MalformedURLException ex) {
            System.err.println(ex.getMessage());
        }

        // Display the Animals array within the Console Window...
        for (int i = 0; i < animals.length; i++) {
            System.out.println(animals[i].toString());
        }
    }

}

And the Animals Class:和动物类:

import java.util.Arrays;


public class Animals {

    private String OwnerName;
    private int birthYear;
    private int billBalance;
    private String Species;
    private String feature;

    //-----------------  Constructors -------------------
    public Animals() { }

    public Animals(String OwnerName, int birthYear, int billBalance, String Species, String feature) {
        this.OwnerName = OwnerName;
        this.birthYear = birthYear;
        this.billBalance = billBalance;
        this.Species = Species;
        this.feature = feature;
    }

    public Animals(Object[] data) {
        if (data.length != 5 || !(data[0] instanceof String) || 
                !(data[1] instanceof Integer) || !(data[2] instanceof Integer) || 
                !(data[3] instanceof String) || !(data[4] instanceof String)) {
            throw new IllegalArgumentException("Error in Animals Constructor data array! "
                    + "Insufficiant data or invalid data element!" + System.lineSeparator() + 
                    Arrays.deepToString(data));
        }
        this.OwnerName = data[0].toString();
        this.birthYear = (int) data[1];
        this.billBalance = (int) data[2];
        this.Species = data[3].toString();
        this.feature = data[4].toString();
    }
    //---------------------------------------------------

    public int getBalance() {
        return billBalance;
    }

    public String getOwnerName() {
        return OwnerName;
    }

    public void setOwnerName(String OwnerName) {
        this.OwnerName = OwnerName;
    }

    public int getBirthYear() {
        return birthYear;
    }

    public void setBirthYear(int birthYear) {
        this.birthYear = birthYear;
    }

    public int getBillBalance() {
        return billBalance;
    }

    public void setBillBalance(int billBalance) {
        this.billBalance = billBalance;
    }

    public String getSpecies() {
        return Species;
    }

    public void setSpecies(String Species) {
        this.Species = Species;
    }

    public String getFeature() {
        return feature;
    }

    public void setFeature(String feature) {
        this.feature = feature;
    }

    @Override
    public String toString() {
        String string = String.format("%-10s %-8d %-8d %-10s %-15s", 
                OwnerName, birthYear, getBalance(), Species, feature);
        return string;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我可以创建一个对象数组来容纳Java中的不同对象吗? - Can I create a object array to hold different objects in Java? 我正在尝试在文件中写入数组字节,但我做不到。 (我可以在FileSystem中创建此文件,并且连接正常)。 任何帮助都感激不尽 - I'm trying to write a array bytes in a file but i can not. (I can create this file in FileSystem, and the conection is working). Any help is grateful 为什么我不能创建泛型类型的内部类的数组? - Why can't I create an array of an inner class of a generic type? 我如何在 M 类中创建任何这些子类 - How I can create any of these subclasses inside class M java对象,我用动物speedy = new dog()创建动物或狗吗? 为什么? - java objects, do I create an animal or a dog with animal speedy = new dog(); and why? 我有一个 ListNode 类,我试图从中创建某种单链表 - I have a ListNode class from which I'm trying to create some sort of singlelinkedlist 我正在尝试为用户创建一个程序来输入 5 个数字并检查它们在数组中是否连续,但我遇到了问题 - I'm trying to create a program for the user to enter 5 numbers and check if they are consecutive in an array but I have a problem 为什么不能列出<!--? extends Animal-->替换为列表<animal> ?</animal> - Why can't List<? extends Animal> be replaced with List<Animal>? 我之所以要创建int数组而不是直接传递一个作为参数? - The reason why I have to create int array instead of pass one directly as argument? 我正在尝试创建导航抽屉,但出现此错误 - I'm trying to create navigation drawer but I have this error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM