在 Java 上学习初学者课程,在 do-while 和 if-else 循环以及字符串验证方面遇到问题
Doing a beginner's course on Java, having problems with do-while and if-else loops, as well as string validation
我正在 Java 上一门初学者课程,目前没有人可以寻求帮助。
该程序很简单,您输入您的详细信息,该程序将为您提供汽车保险的报价。
- 该程序应该为 18 - 70 岁的人提供报价。除此之外,该程序应该打印一条消息,解释他们无法报价。
这是我写的
System.out.print("Please enter the age of the driver: ");
age = Genio.getInteger();
if ( age >18 || age < 70)
{
switch (age)
{
case 17: case 18: case 19:
addition = 460.00;
quote = premium + addition;
return quote;
case 20: case 21:
addition = 280.00;
quote = premium + addition;
return quote;
case 22: case 23: case 24: case 25:
addition = 180.00;
quote = premium + addition;
return quote;
case 26: case 27: case 28:
addition = 140.00;
quote = premium + addition;
return quote;
case 60: case 61: case 62: case 63: case 64: case 65:
addition = 85.00;
quote = premium + addition;
return quote;
case 66: case 67: case 68: case 69:
addition = 150.00;
quote = premium + addition;
return quote;
case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79:
addition = 300.00;
quote = premium + addition;
return quote;
case 80: case 81: case 82: case 83: case 84: case 85:
addition = 800.00;
quote = premium + addition;
return quote;
default:
quote = 400.00;
return quote;
}
} else {
System.out.print("Your are too young to apply for a premium. Sorry");
}
return age;
我无法想象为什么这行不通。当我输入无效年龄(例如 12 岁)时,程序 returns 默认报价为 400 英镑。当我删除默认情况时,它 returns 报价为 12 英镑。所以它似乎完全忽略了 if else 循环。
(我知道 switch-case 是一种低效的方法,但这是任务的一部分。)
- 该程序应该以 "MR"、"MRS" 或 "MS" 的形式要求输入用户头衔。它应该拒绝任何不符合这个要求的东西并要求另一个输入。除了程序总是将第一个输入读取为错误之外,我大部分时间都在使用它,无论它是否存在。然后,当您 re-input 标题时,它会按预期执行。
例如。我输入 MR 作为标题。
程序打印 "Invalid Response. Use 'MR', 'MRS' or 'MS' Please enter your title"
我又输入了MR。程序进入下一阶段。
我创建了一个方法来验证我在这里写的标题。
public String validateTitle(String title)
{
System.out.print("Please enter your title ");
title = Genio.getString();
title = title.toUpperCase();
do
{
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
{
return title;
}
}while((title.equals("MR") && (title.equals("MRS")) && (title.equals("MS"))));
do
{
System.out.print("Invalid Response. Use 'MR', 'MRS' or 'MS' ");
System.out.print("Please enter your title ");
title = Genio.getString();
if((!title.equals("MR") && (!title.equals("MRS")) && (!title.equals("MS"))))
{
System.out.println("Invalid Response. Use 'MR', 'MRS' or 'MS' ");
}
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
{
break;
}
}while((!title.equals("MR") && (!title.equals("MRS")) && (!title.equals("MS"))));
return title;
}
谁能找出问题所在?
- 最后,我在拒绝字符串的空输入时遇到了问题。该程序目前将接受名字和姓氏的空输入。而它应该要求用户为这些字段输入内容。我创建了两种不同的方法,一种用于验证每个名称。我在这个网站上找到了一段代码,我认为它会有所帮助,但它似乎没有做任何事情。
这些是方法
public String validateForename(String forename)
{
System.out.print("Please enter your forename ");
forename = Genio.getString();
forename = forename.toUpperCase();
if(forename != null && !forename.isEmpty())
System.out.println("Invalid Response.");
return forename;
}
public String validateSurname(String surname)
{
System.out.print("Please enter your surname ");
surname = Genio.getString();
surname = surname.toUpperCase();
if(surname != null && !surname.isEmpty())
System.out.println("Invalid Response.");
return surname;
}
我拿的这段代码是if(xx != null && !xx.isEmpty())。我以为我需要删除“!”,但这样做会阻止程序编译。有什么想法吗?
很抱歉问了这个问题,但我的导师今天没空来解释我哪里出错了。
1
if ( age >18 || age < 70)
是错误的,因为12
小于70
。
你需要说 and (&&
):
if ( age >18 && age < 70)
但是正好是 18 或 70 也是有效的,所以:
if (age >= 18 && age <= 70)
2
你又把 &&
和 ||
弄糊涂了。
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
阅读:如果职称等于先生,职称等于女士,职称等于女士。
title
不可能是所有这些。
3
if(surname != null && !surname.isEmpty())
System.out.println("Invalid Response.");
你的意思是说如果姓氏为空或姓氏为空:
if (surname == null || surname.isEmpty())
System.out.println("Invalid Response.");
您应该在 if loop
中添加 &&
运算符。
if ( age >18 && age < 70)
希望这对您有所帮助!
关于问题2:
您正在获取 && 和 ||使困惑。这里:
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
标题不能同时是"MR"、"MRS"和"MS",你要用||而不是 &&.
编辑:
#2 的整个代码有点臃肿。这是我的做法:
public String validateTitle()
{
System.out.print("Please enter your title ");
String title = "";
do
{
title = Genio.getString().toUpperCase();
if (!title.matches("(MR|MRS|MS"))
System.out.print("Invalid Response. Use 'MR', 'MRS' or 'MS' ");
} while (!title.matches("(MR|MRS|MS"));
return title;
}
你能解释一下,为什么你的函数得到一个字符串作为参数,它会立即覆盖吗?
我正在 Java 上一门初学者课程,目前没有人可以寻求帮助。
该程序很简单,您输入您的详细信息,该程序将为您提供汽车保险的报价。
- 该程序应该为 18 - 70 岁的人提供报价。除此之外,该程序应该打印一条消息,解释他们无法报价。
这是我写的
System.out.print("Please enter the age of the driver: ");
age = Genio.getInteger();
if ( age >18 || age < 70)
{
switch (age)
{
case 17: case 18: case 19:
addition = 460.00;
quote = premium + addition;
return quote;
case 20: case 21:
addition = 280.00;
quote = premium + addition;
return quote;
case 22: case 23: case 24: case 25:
addition = 180.00;
quote = premium + addition;
return quote;
case 26: case 27: case 28:
addition = 140.00;
quote = premium + addition;
return quote;
case 60: case 61: case 62: case 63: case 64: case 65:
addition = 85.00;
quote = premium + addition;
return quote;
case 66: case 67: case 68: case 69:
addition = 150.00;
quote = premium + addition;
return quote;
case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79:
addition = 300.00;
quote = premium + addition;
return quote;
case 80: case 81: case 82: case 83: case 84: case 85:
addition = 800.00;
quote = premium + addition;
return quote;
default:
quote = 400.00;
return quote;
}
} else {
System.out.print("Your are too young to apply for a premium. Sorry");
}
return age;
我无法想象为什么这行不通。当我输入无效年龄(例如 12 岁)时,程序 returns 默认报价为 400 英镑。当我删除默认情况时,它 returns 报价为 12 英镑。所以它似乎完全忽略了 if else 循环。
(我知道 switch-case 是一种低效的方法,但这是任务的一部分。)
- 该程序应该以 "MR"、"MRS" 或 "MS" 的形式要求输入用户头衔。它应该拒绝任何不符合这个要求的东西并要求另一个输入。除了程序总是将第一个输入读取为错误之外,我大部分时间都在使用它,无论它是否存在。然后,当您 re-input 标题时,它会按预期执行。
例如。我输入 MR 作为标题。
程序打印 "Invalid Response. Use 'MR', 'MRS' or 'MS' Please enter your title"
我又输入了MR。程序进入下一阶段。
我创建了一个方法来验证我在这里写的标题。
public String validateTitle(String title)
{
System.out.print("Please enter your title ");
title = Genio.getString();
title = title.toUpperCase();
do
{
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
{
return title;
}
}while((title.equals("MR") && (title.equals("MRS")) && (title.equals("MS"))));
do
{
System.out.print("Invalid Response. Use 'MR', 'MRS' or 'MS' ");
System.out.print("Please enter your title ");
title = Genio.getString();
if((!title.equals("MR") && (!title.equals("MRS")) && (!title.equals("MS"))))
{
System.out.println("Invalid Response. Use 'MR', 'MRS' or 'MS' ");
}
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
{
break;
}
}while((!title.equals("MR") && (!title.equals("MRS")) && (!title.equals("MS"))));
return title;
}
谁能找出问题所在?
- 最后,我在拒绝字符串的空输入时遇到了问题。该程序目前将接受名字和姓氏的空输入。而它应该要求用户为这些字段输入内容。我创建了两种不同的方法,一种用于验证每个名称。我在这个网站上找到了一段代码,我认为它会有所帮助,但它似乎没有做任何事情。
这些是方法
public String validateForename(String forename)
{
System.out.print("Please enter your forename ");
forename = Genio.getString();
forename = forename.toUpperCase();
if(forename != null && !forename.isEmpty())
System.out.println("Invalid Response.");
return forename;
}
public String validateSurname(String surname)
{
System.out.print("Please enter your surname ");
surname = Genio.getString();
surname = surname.toUpperCase();
if(surname != null && !surname.isEmpty())
System.out.println("Invalid Response.");
return surname;
}
我拿的这段代码是if(xx != null && !xx.isEmpty())。我以为我需要删除“!”,但这样做会阻止程序编译。有什么想法吗?
很抱歉问了这个问题,但我的导师今天没空来解释我哪里出错了。
1
if ( age >18 || age < 70)
是错误的,因为12
小于70
。
你需要说 and (&&
):
if ( age >18 && age < 70)
但是正好是 18 或 70 也是有效的,所以:
if (age >= 18 && age <= 70)
2
你又把 &&
和 ||
弄糊涂了。
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
阅读:如果职称等于先生,职称等于女士,职称等于女士。
title
不可能是所有这些。
3
if(surname != null && !surname.isEmpty())
System.out.println("Invalid Response.");
你的意思是说如果姓氏为空或姓氏为空:
if (surname == null || surname.isEmpty())
System.out.println("Invalid Response.");
您应该在 if loop
中添加 &&
运算符。
if ( age >18 && age < 70)
希望这对您有所帮助!
关于问题2:
您正在获取 && 和 ||使困惑。这里:
if(title.equals("MR") && (title.equals("MRS") && (title.equals("MS"))))
标题不能同时是"MR"、"MRS"和"MS",你要用||而不是 &&.
编辑:
#2 的整个代码有点臃肿。这是我的做法:
public String validateTitle()
{
System.out.print("Please enter your title ");
String title = "";
do
{
title = Genio.getString().toUpperCase();
if (!title.matches("(MR|MRS|MS"))
System.out.print("Invalid Response. Use 'MR', 'MRS' or 'MS' ");
} while (!title.matches("(MR|MRS|MS"));
return title;
}
你能解释一下,为什么你的函数得到一个字符串作为参数,它会立即覆盖吗?