- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编辑了这个问题,但在程序的底部我试图编写一个 switch 语句来验证一些代码。我试图让用户输入 Y/N 以继续。如果他们输入 Y,程序应该重新启动。如果他们输入 N,程序应该结束。如果他们输入 Z,他们应该会收到一条错误消息,并再次提示继续是/否?现在,如果我随机输入一个字母,我会被送回数据输入部分,我不确定为什么。
我还注意到我的计算不对。我假设这与我没有使用 bigdecimal 类这一事实有关。目前,如果我输入 5.6 作为百分比,它会自动假定它是 560%
我是 Java 的新手,不幸的是在挣扎。昨晚有人很友好地帮助了我,但没有公然给我答案,我很感激,因为这让我自己解决了问题。
非常感谢任何帮助,因为我在这门课上遇到了困难。
import java.util.Scanner;
import java.text.NumberFormat;
public class LoanCalculator
{
public static double getDoubleWithinRange(Scanner sc, String prompt, double min, double max) //validate double
{
double d = 0;
boolean isValid = false;
while(isValid == false)
{
System.out.println(prompt); //print prompt for double
if (sc.hasNextDouble())
{
d = sc.nextDouble();
if (d <= min) //if input <= minimum double
{
System.out.println("Error! Number must be greater than " + min);
System.out.println();//print error grater than min double
}
else if (d >= max) // if input >= maximum double value
{
System.out.println("Error number must be less than " + max);
System.out.println();//print error less than max double value
}
else
isValid = true; //else double is valid
}
else
{
System.out.println("Error! Invalid decimal value.");
System.out.println();
sc.nextLine();
}
}
return d; //return double
}
//validate integer
public static int getIntWithinRange(Scanner sc, String prompt, int min, int max)
{
int i = 0;
boolean isValid = false;
while(isValid == false)
{
System.out.println(prompt); //print prompt for integer
if (sc.hasNextInt())
{
i = sc.nextInt();
if (i <= min) //if input <= minimum integer
{
System.out.println("Error! Number must be greater than " + min);
System.out.println();//print error grater than min integer
}
else if (i >= max) // if input >= maximum integer value
{
System.out.println("Error number must be less than " + max);
System.out.println();//print error less than max integer value
}
else
isValid = true; //else integer is valid
}
else
{
System.out.println("Error! Invalid integer value.");
System.out.println();
sc.nextLine();
}
}
return i; //return integer
}
public static void main(String[] args)
{
System.out.println("Welcome to the loan calculator"); //welcome user to loan calculator
Scanner sc = new Scanner(System.in); // create new scanner
String choice = "y"; //start choice loop
while (choice.equalsIgnoreCase("y"))
{
System.out.println();
System.out.println("DATA ENTRY");
double loanAmount = getDoubleWithinRange(sc, "Enter loan amount: ", 0.0, 1000000.0); //get user input for loanAmount
//get user input for interestRate
double interestRate = getDoubleWithinRange(sc, "Enter yearly interest rate: ", 0, 20);
//get user input for years
int years = getIntWithinRange(sc, "Enter number of years: ", 0, 100);
int months = years * 12; // calculate years to months
//calculate monthly payment
double monthlyPayment = loanAmount * interestRate/ (1 - 1 / Math.pow(1 + interestRate, months));
//import currency instance
NumberFormat currency = NumberFormat.getCurrencyInstance();
// import percent instance
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMinimumFractionDigits(1); //set fraction digits for percent
System.out.println("RESULST"); //print results
//print loanAmount
System.out.println("Loan Amount: " + currency.format(loanAmount));
//print interestRate
System.out.println("Yearly interest rate: " + percent.format(interestRate));
System.out.println("Number of years: " + years); //print years
//print monthlyPayment
System.out.println("Monthly payment: " + currency.format(monthlyPayment));
boolean quit = false;
do {
System.out.println();
System.out.println("Continue? (y/n): "); //prompt user to continue
String userinput1 = sc.next();
char choice1 = userinput1.toLowerCase().charAt(0);
switch (choice1) {
case 'y':
break;
case 'n':
// case n, do something here
quit = true;
break;
case ' ':
System.out.println("Error! This entry is required. Try again.");
break;
default:
System.out.println("Error! Entry must be 'y or 'n''");
break;
}
} while (!quit);
}
}
}
最佳答案
像这样使用开关
:
boolean quit = false;
do{ // change your while by this
// your own stuff here
// then after all your program stuff
boolean choiceIsOK = false;
do{
String userinput = sc.next();
char choice = userinput.toLowerCase().charAt(0);
switch(choice){
case 'y':
// case y, do nothing, you could even remove that case.
choiceIsOK = true;
break;
case 'n':
// case n, do something here
choiceIsOK = false;
quit = true;
break;
default:
// error or warning
System.out.println("Type Y or N to respectively continue or quit");
break;
}
}while(!choiceIsOK);
}while (!quit);
在您的代码中,它将如下所示:
public static void main(String[] args)
{
System.out.println("Welcome to the loan calculator"); //welcome user to loan calculator
Scanner sc = new Scanner(System.in); // create new scanner
//String choice = "y"; //start choice loop [no need for that line anymore]
boolean quit = false;
do{
System.out.println();
System.out.println("DATA ENTRY");
double loanAmount = getDoubleWithinRange(sc, "Enter loan amount: ",
0.0, 1000000.0); //get user input for loanAmount
//get user input for interestRate
double interestRate = getDoubleWithinRange(sc,
"Enter yearly interest rate: ", 0, 20);
//get user input for years
int years = getIntWithinRange(sc, "Enter number of years: ", 0, 100);
int months = years * 12; // calculate years to months
//calculate monthly payment
double monthlyPayment = loanAmount * interestRate/
(1 - 1/Math.pow(1 + interestRate, months));
//import currency instance
NumberFormat currency = NumberFormat.getCurrencyInstance();
// import percent instance
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMinimumFractionDigits(1); //set fraction digits for percent
System.out.println("RESULST"); //print results
//print loanAmount
System.out.println("Loan Amount: " + currency.format(loanAmount));
//print interestRate
System.out.println("Yearly interest rate: " + percent.format(interestRate));
System.out.println("Number of years: " + years); //print years
//print monthlyPayment
System.out.println("Monthly payment: " + currency.format(monthlyPayment));
// then after all your program stuff
boolean choiceIsOK = false;
do{
System.out.println();
System.out.println("Continue? (y/n): "); //prompt user to continue
String userinput1 = sc.next();
char choice1 = userinput1.toLowerCase().charAt(0);
switch(choice1){
case 'y':
// case y, do nothing, you could even remove that case.
choiceIsOK = true;
break;
case 'n':
// case n, do something here
choiceIsOK = true; // I fixed this
quit = true;
break;
default:
// error or warning
System.out.println("Type Y or N to respectively continue or quit");
break;
}
}while(!choiceIsOK);
}while(!quit);
}
}
关于java - 如何验证用户输入的字符串? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9425099/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!