【问题标题】:How to print array contents with a getter?如何使用 getter 打印数组内容?
【发布时间】:2021-09-30 08:49:57
【问题描述】:

我正在尝试打印存储在 ArrayList 中的数组的内容。

我的构造函数参数是 (String,String,String,String[], String, String)。

当创建 add. 函数到 arrayList 时,内容存储在 String[] 参数中。

但是当使用 getter 方法返回 String[] 时,它会引发错误:“类型不匹配:无法从 String 转换为 String[]”。

Eclipse的解决方法是把getter方法改成String,然后add.函数不起作用,因为参数应该是String[]。

所有 .toString.clone 等都返回内存位置而不是数组内容。 急于求救!! 这是我的代码的一部分:

    public class NewRegandLogin {
    
        private String alumniFirstName; 
        private String alumniLastName;
        private String alumniId;
        private  Scanner scanner = new Scanner(System.in);
        private String linkedInPage;
        static ArrayList<NewRegandLogin> loginInformation = new ArrayList<>();
        private  String alumniIdImput;
        private  String passwordImput;
        private String permanentPasword;
        private String[] coursesList;
    
        public NewRegandLogin(String alumniFirstName, String alumniLastName,String alumniId, String[] coursesList, String linkedInPage, String permanentPasword) {
            this.alumniFirstName=alumniFirstName;
            this.alumniLastName = alumniLastName;
            this.alumniId = alumniId;
            this.coursesList = coursesList;
            this.linkedInPage = linkedInPage;
            this.permanentPasword = permanentPasword;       
        }
        
        public void setAlumniCourses() {
        
            coursesList = new String[10];
            
            for (int i=0; i < coursesList.length; i++) {
                if(coursesList[i]==null) {
                    System.out.println("Completed Course Name: ");
                    coursesList[i]=scanner.next();
                }
                if(coursesList[i].equals("s") || coursesList[i].equals("S")) {
                    break;
                }
            }
        }
    
        public String[] getCourses() {
            return Arrays.toString(coursesList);
        }

主要

public class Main {
    
    static NewRegandLogin newRegAndLogin = new NewRegandLogin(null, null, null, null, null, null);

    public static void main(String[] args) {

        System.out.println("Please make a list of completed Courses: (Enter S to stop adding courses) ");
        newRegAndLogin.setAlumniCourses();
        loginInformation.add(newRegAndLogin);
        printAlumniProfile();
        }
            
    public static void printAlumniProfile() {
        for (int i = 0; i<NewRegandLogin.loginInformation.size();i++) {
            System.out.println(((i+1)+"-"+ NewRegandLogin.loginInformation.get(i)));
            System.out.println();
        }           
    }
}

输出: 1-Alumni Name: Geri Glazer Alumni ID: geri.glazer.she-codes Courses completed: [Ljava.lang.String;@3dd3bcd

【问题讨论】:

    标签: java arraylist getter


    【解决方案1】:
    public String[] getCourses() {
        return Arrays.toString(coursesList);
    }
    

    Arrays.toString 返回 String,而不是 String[]。如果要返回String,请将返回类型更改为String

    public String getCourses() {
        return Arrays.toString(coursesList);
    }
    

    如果你想返回一个单元素数组,包含coursesList的字符串表示,你可以将String包装在一个数组中:

    public String[] getCourses() {
        return new String[]{Arrays.toString(coursesList)};
    }
    

    如果要返回数组,直接返回数组即可:

    public String[] getCourses() {
        return coursesList;
    }
    

    或者,更安全的是,返回数组的防御性副本(以防止调用者更改内部数组):

    public String[] getCourses() {
        return Arrays.copyOf(coursesList, coursesList.length);
    }
    

    【讨论】:

    • 我相信 courseList.size() 应该是coursesList.length。或者,完全跳过使用 Arrays.copyOf,直接返回 coursesList.clone()
    • 我已经尝试了这些方法,但这不是我正在寻找的解决方案。我的问题是“如何打印内容”你的建议让我得到内存位置而不是实际内容
    • 还尝试了 .clone()。它仍然返回 [Ljava.lang.String@12343454fcd
    猜你喜欢
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多