Java从listArray中删除条目
我有一项创建通讯簿的任务。我基于良好的可用性创建了我的程序。例如,当创建一个新条目时,用户不能移动到下一个输入,直到给出一个有效的条目或选择取消。 创建程序后,我正在阅读导师给出的示例,在添加条目之前,他们不检查有效输入,而是发送.add请求,然后在检测到错误数据时引发异常 我问我的导师,如果我应该这样做,即使我认为我的设计更好,我不想失去分数,因为我没有按照他们的方式做。他说我应该坚持以下例子:Java从listArray中删除条目,java,arraylist,Java,Arraylist,我有一项创建通讯簿的任务。我基于良好的可用性创建了我的程序。例如,当创建一个新条目时,用户不能移动到下一个输入,直到给出一个有效的条目或选择取消。 创建程序后,我正在阅读导师给出的示例,在添加条目之前,他们不检查有效输入,而是发送.add请求,然后在检测到错误数据时引发异常 我问我的导师,如果我应该这样做,即使我认为我的设计更好,我不想失去分数,因为我没有按照他们的方式做。他说我应该坚持以下例子: public AddressBook() { entries = new ArrayLis
public AddressBook()
{
entries = new ArrayList < Entry >();
}
我试过这样做,并改变了:
throw new RuntimeException(e.getMessage());
行读
System.out.println( e.getMessage());
这样它就不会退出程序,但是这样做已经添加了条目,所以在给出适当的错误后,我需要删除已经添加的条目。我该怎么做?它有某种索引吗?我不知道导师为什么要你这样做,或者我没有抓住要点?如果在这里调用的条目构造函数中抛出异常:
addressBook.addPerson(new Entry(name, street, town, postcode));
它不会添加到您的列表中。只需保持代码原样,并在此处捕获异常:
try{
addressBook.addPerson(new Entry(name, street, town, postcode));
catch(Exception e){
//Tell the user what he did wrong and let him reenter
}
如果在此处调用的条目构造函数中引发异常:
addressBook.addPerson(new Entry(name, street, town, postcode));
它不会添加到您的列表中。只需保持代码原样,并在此处捕获异常:
try{
addressBook.addPerson(new Entry(name, street, town, postcode));
catch(Exception e){
//Tell the user what he did wrong and let him reenter
}
您可以在构造函数中声明选中的异常,即扩展
exception
而不是RuntimeException
的异常。然后,您将被迫在addCommand
方法中处理它
public AddressBook() {
entries = new ArrayList< Entry>();
}
public void addPerson(Entry addPerson) {
entries.add(addPerson);
}
private void addCommand() {
System.out.print("Enter Full Name : ");
String name = myScanner.nextLine();
System.out.print("Enter House No and Street name: ");
String street = myScanner.nextLine();
System.out.print("Enter Town: ");
String town = myScanner.nextLine();
System.out.print("Enter Postcode: ");
String postcode = myScanner.nextLine();
postcode = postcode.toUpperCase();
final Entry entry;
try {
entry = new Entry(name, street, town, postcode);
} catch (BadDataException ex) {
System.out.println(ex.getMessage());
return;
}
addressBook.addPerson(new Entry(name, street, town, postcode));
}
public Entry(String strName, String strStreet, String strTown, String strPostcode) throws BadDataException {
name = strName;
street = strStreet;
town = strTown;
postcode = strPostcode;
try {
checkDetails();
} catch(Exception ex) {
throw new BadDataException(ex);
}
}
private static class BadDataException extends Exception {
public BadDataException(final Throwable cause) {
super(cause);
}
}
公共通讯簿(){
entries=newarraylist();
}
公共无效添加人(条目添加人){
条目。添加(addPerson);
}
私有void addCommand(){
系统输出打印(“输入全名:”);
String name=myScanner.nextLine();
系统输出打印(“输入房屋编号和街道名称:”);
String street=myScanner.nextLine();
系统输出打印(“输入城镇:”;
字符串town=myScanner.nextLine();
系统输出打印(“输入邮政编码:”);
字符串postcode=myScanner.nextLine();
postcode=postcode.toUpperCase();
最终入围;
试一试{
条目=新条目(名称、街道、城镇、邮政编码);
}捕获(BadDataException ex){
System.out.println(例如getMessage());
返回;
}
addressBook.addPerson(新条目(姓名、街道、城镇、邮政编码));
}
公共条目(字符串strName、字符串strStret、字符串strTown、字符串strPostcode)引发BadDataException{
名称=strName;
街道=街道;
城镇=斯特敦;
邮政编码=邮政编码;
试一试{
checkDetails();
}捕获(例外情况除外){
抛出新的BadDataException(ex);
}
}
私有静态类BadDataException扩展异常{
公共BadDataException(最终可丢弃原因){
超级(原因);
}
}
您可以在构造函数中声明选中的异常,即扩展异常
而不是运行时异常
的异常。然后,您将被迫在addCommand
方法中处理它
public AddressBook() {
entries = new ArrayList< Entry>();
}
public void addPerson(Entry addPerson) {
entries.add(addPerson);
}
private void addCommand() {
System.out.print("Enter Full Name : ");
String name = myScanner.nextLine();
System.out.print("Enter House No and Street name: ");
String street = myScanner.nextLine();
System.out.print("Enter Town: ");
String town = myScanner.nextLine();
System.out.print("Enter Postcode: ");
String postcode = myScanner.nextLine();
postcode = postcode.toUpperCase();
final Entry entry;
try {
entry = new Entry(name, street, town, postcode);
} catch (BadDataException ex) {
System.out.println(ex.getMessage());
return;
}
addressBook.addPerson(new Entry(name, street, town, postcode));
}
public Entry(String strName, String strStreet, String strTown, String strPostcode) throws BadDataException {
name = strName;
street = strStreet;
town = strTown;
postcode = strPostcode;
try {
checkDetails();
} catch(Exception ex) {
throw new BadDataException(ex);
}
}
private static class BadDataException extends Exception {
public BadDataException(final Throwable cause) {
super(cause);
}
}
公共通讯簿(){
entries=newarraylist();
}
公共无效添加人(条目添加人){
条目。添加(addPerson);
}
私有void addCommand(){
系统输出打印(“输入全名:”);
String name=myScanner.nextLine();
系统输出打印(“输入房屋编号和街道名称:”);
String street=myScanner.nextLine();
系统输出打印(“输入城镇:”;
字符串town=myScanner.nextLine();
系统输出打印(“输入邮政编码:”);
字符串postcode=myScanner.nextLine();
postcode=postcode.toUpperCase();
最终入围;
试一试{
条目=新条目(名称、街道、城镇、邮政编码);
}捕获(BadDataException ex){
System.out.println(例如getMessage());
返回;
}
addressBook.addPerson(新条目(姓名、街道、城镇、邮政编码));
}
公共条目(字符串strName、字符串strStret、字符串strTown、字符串strPostcode)引发BadDataException{
名称=strName;
街道=街道;
城镇=斯特敦;
邮政编码=邮政编码;
试一试{
checkDetails();
}捕获(例外情况除外){
抛出新的BadDataException(ex);
}
}
私有静态类BadDataException扩展异常{
公共BadDataException(最终可丢弃原因){
超级(原因);
}
}
为什么不将您的条目添加到一个try catch
try{
Entry entry = new Entry(name, street, town, postcode);
addressBook.addPerson(entry);
}catch(Exception e){
// Entry is not added into the List.
// do something and make the user re-enter the details.
}
为什么不将您的条目添加到一个
try catch
try{
Entry entry = new Entry(name, street, town, postcode);
addressBook.addPerson(entry);
}catch(Exception e){
// Entry is not added into the List.
// do something and make the user re-enter the details.
}
不添加条目吗?捕获异常?@bmorris591这是我的原始版本所做的,但当我与导师交谈时,他说要坚持他们的示例,这是他们所做的方式,而不是像他们的示例所示退出,他说我需要处理异常,向用户显示一条消息,然后要求重新输入。不知道如何才能做到这一点后,该条目已被添加,如他们的例子所示。我想我可能只是提交了我的原始程序,冒着丢失一些标记的风险当
条目的构造函数中发生异常时,该对象不会添加到Arraylist中。导师可能要求这样做的一个原因是,通过这种方式可以实现更好的模块化。只有Entry
类才能知道在输入错误时何时抛出异常。是否不添加该项?捕获异常?@bmorris591这是我的原始版本所做的,但当我与导师交谈时,他说要坚持他们的示例,这是他们所做的方式,而不是像他们的示例所示退出,他说我需要处理异常,向用户显示一条消息,然后要求重新输入。不知道如何才能做到这一点后,该条目已被添加,如他们的例子所示。我想我可能只是提交我的原始计划,冒着失去一些分数的风险