我想要做的是让用户输入年龄,让程序使用getter和setter,同时检查异常,如果它捕捉到异常,则必须再次运行该方法。
导入java。util。扫描仪;
公共课主课{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
TestPatient patientZero = new TestPatient();
patientZero.setAge(in.nextInt());
System.out.println(patientZero.getAge());
}
}
//患者类
导入java。util。输入不匹配异常;导入java。util。扫描仪;
公共类测试病人{private int age;
public int getAge(){
return age;
}
public void setAge(int newAge){
Scanner in = new Scanner(System.in);
int age;
boolean success = false;
try {
System.out.print("Enter in Your age:");
age = in.nextInt();
success = true;
} catch (InputMismatchException ex) {
System.out.println("Im sorry, please enter just you age.\nTry again");
}
this.age=newAge;
}
}
当您将数据结构代码(例如,患者类别)与I/O代码(例如,扫描仪输入代码)混合在一起时,您的整体程序结构可能会得到改进。它们应该完全分开,比如:
public class TestPatient {
private int age;
public int getAge(){
return age;
}
public void setAge(int newAge) {
this.age = newAge;
}
}
然后I/O可以转移到其他地方:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// get your data here and create your new TestPatient
}
为什么这很重要?您事先不知道最终将如何使用主代码,需要保持它的开放性和灵活性,以便在任何I/O情况下使用,包括GUI(如果需要)。
此外,您的代码将为每个setter调用创建一个新的Scanner对象,这是一件危险的事情,因为如果扫描器基于系统。如果关闭,则程序无法再从用户处获取输入。
还要注意,如果不允许传入的数据,可以从setter方法引发异常。
例如,
public void setAge(int newAge) {
if (newAge <= 0) {
String text = "for newAge is less than or equal to 0: " + newAge;
throw new IllegalArgumentException(text);
}
this.age = newAge;
}
使用while
循环。在读取用户输入时,也不需要newAge
参数。
public void setAge(){
int age;
Scanner in = new Scanner(System.in);
boolean success = false;
while (!success) {
try {
System.out.print("Enter in Your age:");
age = in.nextInt();
success = true;
} catch (InputMismatchException ex) {
success = false;
System.out.println("Im sorry, please enter just you age.\nTry again");
}
}
this.age=age;
}
问题内容: 我们已经从软件供应商处收到Java代码。它包含许多没有任何部分的块。他们到处都是。例: 我的问题是:以上做法是否可以接受?如果是这样,什么时候?还是我应该继续删除所有这些“虚假” 和陈述? 对我来说,这看起来像是可怕的练习,但是我对Java的经验不足以肯定。如果您不打算对它们做任何事情,为什么会发现它们呢?在我看来,仅当您确信例外绝对不会有后果并且您不在乎是否发生例外时,您才这样做。但
问题内容: 我需要捕捉一些从PHP本机函数抛出的警告,然后处理它们。 特别: DNS查询失败时,它将引发警告。 / 不起作用,因为警告也不例外。 我现在有2个选择: 似乎有点过分,因为我必须使用它来过滤页面中的每个警告(这是真的吗?); 调整错误报告/显示,以使这些警告不会在屏幕上显示,然后检查返回值;如果为,则找不到主机名的记录。 这里的最佳做法是什么? 问题答案: 设置和还原错误处理程序 一种
问题内容: 如果某些东西无法正常工作,或者某些插件未在我的Eclipse中正确加载,我通常会建议您以干净模式打开Eclipse。 那么,如何在干净模式下运行?如果我这样做会怎样? 问题答案: 它能做什么: 如果设置为“ true”,则OSGi框架和eclipse运行时使用的所有缓存数据都将被清除。这将清除用于存储捆绑包依赖关系解析和Eclipse扩展注册表数据的缓存。使用此选项将强制eclipse
我的工作笔记本电脑运行LinuxMint作为基本操作系统,加上Virtualbox来运行Windows 7,这是实际的工作环境,通常加上一个额外的Virtualbox VM来运行不同的Windows安装,我在其中做我的客户机项目工作(我每个客户机有一个VM,以避免弄乱我的主操作系统)。 但我想知道,在客户项目中使用Docker是否可行和有益?也就是说,我想保留LinuxMint(以保持我的理智),
我一直在看《破解编码面试》(5E,119页)一书中的分区函数。我将其复制如下: 给定此数组: 1 2 3 3 5 6 4 左=4,右=4。退出 然而,我最后得到的数组是:
问题内容: 由于可以直接从类(即ClassName.methodName)中调用静态方法,因此为什么需要使用该类的对象来调用静态方法? 如果有人知道的话,请举例说明。 问题答案: 以下代码包含一个示例,其中通过引用调用了静态方法。 由于是静态方法,因此表达式与相同。因此,在运行时不会抛出异常。