我将静态方法添加到对象的Arraylist。
public static void addObject() {
int id;
String name;
try{
System.out.print("Id: ");
id = Integer.parseInt(sc.next());
System.out.print("Name: "); //when the program gets here, he just skips back to my main class...
name = sc.nextLine();
Object o = new Object(id, name);
l.addObject(o); //adds the object to this list (l) of objects
}
catch(NumberFormatException nfe){
System.out.println("Not a valid id!");
addObject();
}
}
我的主要方法,包含do-while-loop中的开关,用于添加,删除和编辑对象。
public static void main(String[] args){
int choice;
do{
try{
choice = Integer.parseInt(sc.next());
switch (choice){
case 0: break; //ends the program
case 1: addObject(); break; //starting static method to add an object with a name and an id
//here are some more cases with similar static methods (left them out for simplicity)
default: System.out.println("Not a valid choice!");break;
}
}
catch(NumberFormatException nfe){
System.out.println("Not a valid choice!");
choice = -1; //to keep the loop running, and prevent another exception
}
}while (choice != 0);
System.out.println("Good bye!");
}
我的对象类
public class Object{
private int id;
private String name;
public Object(int id, String name) {
this.id = id;
this.name = name;
}
}
我的ObjectList类
import java.util.*;
public class ObjectList {
private List<Object> objects;
public ObjectList() {
objects = new ArrayList<Object>();
}
public void addObject(Object o){
objects.add(d);
}
}
当我尝试运行静态方法来添加一个Object时,它会很好地记录对象的id,但是当我输入对象id时,它会返回到我的main方法,从头开始循环。 当我在交换机中输入一个字符串(重新启动循环)时,它会做出反应。 但我似乎无法正确添加对象。
这也是一个学校作业,他们给了我们所有这些代码(try-catch方法除外),并要求我们为静态方法和main方法编写try-catch。 我可能会找到一个使用if子句的main方法的解决方法,但我想知道这是否可以使用try-catch方法。
答案 0 :(得分:1)
的问题:
nextLine()
)和那些't(例如nextInt()
)。请注意,前者nextLine()
吞下行尾(EOL)令牌而nextInt()
和类似方法不会。因此,如果您拨打nextInt()
并留下行尾令牌纠结,则调用nextLine()
将无法获得您的下一行,而是会吞下悬空的EOL令牌。一种解决方案是在调用sc.nextLine()
之后立即调用sc.nextInt()
来处理EOL令牌。或者,在您致电sc.next()
的地方,将其更改为sc.nextLine()
。例如,如果您有此代码:
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number: ");
int number = sc.nextInt();
System.out.print("Enter name: ");
String name = sc.nextLine();
您会发现该名称始终为""
,这是因为sc.nextLine()
吞下了用户输入数字后留下的行尾(EOL)令牌。解决此问题的一种方法是:
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number: ");
int number = sc.nextInt();
sc.nextLine(); // ***** to swallow the dangling EOL token
System.out.print("Enter name: ");
String name = sc.nextLine();