Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ArrayList显示来自其他类的值_Java_Arraylist - Fatal编程技术网

Java 使用ArrayList显示来自其他类的值

Java 使用ArrayList显示来自其他类的值,java,arraylist,Java,Arraylist,我试图制作一个任务列表,要求您逐个输入任务,然后按顺序显示它们(如1.任务1、2.任务2、3.任务3等)。但是当它显示任务时,它会返回一次“0.null”,而不是列出输入的任何任务。以下是我正在使用的脚本: 头等舱 package todolist; import java.util.ArrayList; public class ToDoList1 { public static void main(String[] args) { // TODO Auto-gene

我试图制作一个任务列表,要求您逐个输入任务,然后按顺序显示它们(如1.任务1、2.任务2、3.任务3等)。但是当它显示任务时,它会返回一次“0.null”,而不是列出输入的任何任务。以下是我正在使用的脚本:

头等舱

package todolist;
import java.util.ArrayList;

public class ToDoList1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        ArrayList<ToDoList2> list = new ArrayList<ToDoList2>();
        System.out.println("Time to make a digital to-do list!");

        ToDoList2 n = new ToDoList2();
        list.add(n);

        System.out.println(ToDoList2.name + "'s to-do list");
        System.out.println(ToDoList2.i + ". " + ToDoList2.l);

        for(ToDoList2 enhanced : list)
        {
            System.out.println(ToDoList2.i + ". " + ToDoList2.m);
        }
    }
}

您的代码不正确。ToDoList2从标准输入扫描项目列表,但不存储它。你应该做如下的事情


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

class TodoList {

    public static String name;

    List<String> tasks;

    public TodoList(String name) {
        this.name = name;
        this.tasks = new ArrayList<>();
    }

    public void addTask(String task) {
        this.tasks.add(task);
    }

    public String toString() {
        int i = 1;
        StringBuilder stringBuilder = new StringBuilder();
        for (String task : tasks) {
            stringBuilder.append(i + ". " + task);
            stringBuilder.append("\n");
            i++;
        }
        return stringBuilder.toString();
    }

}

public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("First type your name to identify your list in case you lose it");
        String name = s.nextLine();

        System.out.println("Make sure to type \"end\" when you are finished");
        System.out.println("Type in the first item on your to-do list");

        TodoList todoList = new TodoList(name);

        String task = null;
        while (!(task = s.nextLine()).equals("end")) {
            todoList.addTask(task);
            System.out.println("Type in the next item for your to-do list");
        }

        System.out.println(todoList);

    }


}

导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
托多利斯特阶级{
公共静态字符串名;
列出任务;
公共TodoList(字符串名称){
this.name=名称;
this.tasks=new ArrayList();
}
公共void addTask(字符串任务){
this.tasks.add(任务);
}
公共字符串toString(){
int i=1;
StringBuilder StringBuilder=新的StringBuilder();
for(字符串任务:任务){
stringBuilder.append(i+“+”任务);
stringBuilder.append(“\n”);
i++;
}
返回stringBuilder.toString();
}
}
公共班机{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
System.out.println(“首先键入您的名字以识别您的列表,以防丢失它”);
字符串名称=s.nextLine();
System.out.println(“确保完成后键入\“end\”);
System.out.println(“输入待办事项列表上的第一项”);
TodoList TodoList=新TodoList(名称);
字符串任务=null;
而(!(task=s.nextLine()).equals(“end”)){
todoList.addTask(任务);
System.out.println(“输入待办事项列表的下一项”);
}
System.out.println(todoList);
}
}

您的代码不正确。ToDoList2从标准输入扫描项目列表,但不存储它。你应该做如下的事情


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

class TodoList {

    public static String name;

    List<String> tasks;

    public TodoList(String name) {
        this.name = name;
        this.tasks = new ArrayList<>();
    }

    public void addTask(String task) {
        this.tasks.add(task);
    }

    public String toString() {
        int i = 1;
        StringBuilder stringBuilder = new StringBuilder();
        for (String task : tasks) {
            stringBuilder.append(i + ". " + task);
            stringBuilder.append("\n");
            i++;
        }
        return stringBuilder.toString();
    }

}

public class Main {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("First type your name to identify your list in case you lose it");
        String name = s.nextLine();

        System.out.println("Make sure to type \"end\" when you are finished");
        System.out.println("Type in the first item on your to-do list");

        TodoList todoList = new TodoList(name);

        String task = null;
        while (!(task = s.nextLine()).equals("end")) {
            todoList.addTask(task);
            System.out.println("Type in the next item for your to-do list");
        }

        System.out.println(todoList);

    }


}

导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
托多利斯特阶级{
公共静态字符串名;
列出任务;
公共TodoList(字符串名称){
this.name=名称;
this.tasks=new ArrayList();
}
公共void addTask(字符串任务){
this.tasks.add(任务);
}
公共字符串toString(){
int i=1;
StringBuilder StringBuilder=新的StringBuilder();
for(字符串任务:任务){
stringBuilder.append(i+“+”任务);
stringBuilder.append(“\n”);
i++;
}
返回stringBuilder.toString();
}
}
公共班机{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
System.out.println(“首先键入您的名字以识别您的列表,以防丢失它”);
字符串名称=s.nextLine();
System.out.println(“确保完成后键入\“end\”);
System.out.println(“输入待办事项列表上的第一项”);
TodoList TodoList=新TodoList(名称);
字符串任务=null;
而(!(task=s.nextLine()).equals(“end”)){
todoList.addTask(任务);
System.out.println(“输入待办事项列表的下一项”);
}
System.out.println(todoList);
}
}
a)鉴于每个ToDoList2对象都是一个单独的任务,我不知道为什么要将对象类成员设置为静态

b) 在ToDoList2构造函数中,有一个for循环,它引入了一个局部变量i,它隐藏了ToDoList2成员变量i。您最好更改其中一个变量名

c) 在ToDoList2构造函数中,有一个for循环,它将扫描程序返回的字符串分配给局部变量m。您确定要将m作为局部变量,还是确实要将返回的字符串分配给成员变量m?我考虑的是后者,因为成员变量m从未被赋值,这解释了为什么代码打印为null

d) 编写代码时,最好使用有意义的变量名。使用像i这样的名称作为循环中的索引是可以的,但在所有其他情况下,您应该使用更具描述性的名称来告诉读者变量存储了什么

请考虑将所有Todoist2成员变量私有化(如果可能的话)。向ToDoList2类添加打印函数以打印任务详细信息。面向对象编程的一个关键原则是隐藏类的内部

a)鉴于每个ToDoList2对象都是一个单独的任务,我不知道为什么要将对象类成员设置为静态

b) 在ToDoList2构造函数中,有一个for循环,它引入了一个局部变量i,它隐藏了ToDoList2成员变量i。您最好更改其中一个变量名

c) 在ToDoList2构造函数中,有一个for循环,它将扫描程序返回的字符串分配给局部变量m。您确定要将m作为局部变量,还是确实要将返回的字符串分配给成员变量m?我考虑的是后者,因为成员变量m从未被赋值,这解释了为什么代码打印为null

d) 编写代码时,最好使用有意义的变量名。使用像i这样的名称作为循环中的索引是可以的,但在所有其他情况下,您应该使用更具描述性的名称来告诉读者变量存储了什么


请考虑将所有Todoist2成员变量私有化(如果可能的话)。向ToDoList2类添加打印函数以打印任务详细信息。面向对象编程的一个关键原则是隐藏类的内部

不清楚,为什么列表中只有一个元素?我说的是第一个类中的abt列表在第二个类的构造函数ToDoList2中,你从扫描器中读取字符串,但你没有保存任何内容。干什么用的?我把绳子存起来