Java 设法找到一种方法
我试图在过程类型方法中加入一个try-catch,但我95%确定它必须是函数类型。我试图完成的是使我的代码大体上更短。我想到的最大的事情之一就是在方法中加入一个try-catch并调用该方法 问题是,如果输入是整数或不是整数,它将验证输入-它甚至捕获异常。问题是,一旦继续使用程序/计算,它就不会“记住”已验证的输入。这是我遇到麻烦的代码部分Java 设法找到一种方法,java,function,methods,try-catch,procedure,Java,Function,Methods,Try Catch,Procedure,我试图在过程类型方法中加入一个try-catch,但我95%确定它必须是函数类型。我试图完成的是使我的代码大体上更短。我想到的最大的事情之一就是在方法中加入一个try-catch并调用该方法 问题是,如果输入是整数或不是整数,它将验证输入-它甚至捕获异常。问题是,一旦继续使用程序/计算,它就不会“记住”已验证的输入。这是我遇到麻烦的代码部分 public static void tryCatchNum(double value) { while(true) { try
public static void tryCatchNum(double value)
{
while(true)
{
try
{
Scanner iConsole = new Scanner(System.in);
value = Double.parseDouble(iConsole.nextLine());
System.out.println(" ");
break;
}
catch(NumberFormatException e)
{
System.out.println("NumberFormatException error has oocured. Please try again.");
}
}
}
以下是整个计划:
import java.util.Scanner;
public class ch7exercise1
{
public static double compound(double oA, double cI)
{
return roundCent((oA*(Math.pow((1+(percent(cI))),10))));
}
public static double percent(double interest)
{
return interest/100.0;
}
public static double roundCent(double amount)
{
return ((Math.round(amount*100))/100.0); //100.0 is mandatory.
}
public static void tryCatchNum(double value)
{
while(true)
{
try
{
Scanner iConsole = new Scanner(System.in);
value = Double.parseDouble(iConsole.nextLine());
System.out.println(" ");
break;
}
catch(NumberFormatException e)
{
System.out.println("NumberFormatException error has oocured. Please try again.");
}
}
}
@SuppressWarnings("unused")
public static void main(String[] args)
{
boolean f = true;
boolean f2 = true;
double origAmount = 0;
double compInterest = 0;
double total = 0;
Scanner iConsole = new Scanner(System.in);
System.out.println("10 year Compound Interest Claculator\n");
System.out.println("Input amount of money deposited in the bank");
tryCatchNum(origAmount);
System.out.println("Input compouded interest rate. (If the compound interest is 3% input 3)");
tryCatchNum(compInterest);
total = compound(origAmount,compInterest);
System.out.println("$"+total);
}
}Java参数是按值传递的。您正在将0传递给
tryCatchNum
方法。将值的副本传递给该方法。此方法为其自己的副本指定一个新值,然后返回。所以原始值仍然是0
您不能将任何内容传递给该方法。相反,该方法必须返回已验证的值。此外,考虑使用一个更合适的方法名称:
public double readDoubleValue() {
...
return value;
}
在主要方法中:
double origAmount = readDoubleValue();
由于double在Java中是一个原语,它通过值传递给方法,因此当您更改原语的值时,对方法参数的更改不会反映在传递给方法调用的原始变量中 阅读Java ranch上的cup故事,其中解释了按值传递和按引用传递。 下一篇要读的故事是关于Java Ranch的价值传递故事。 您应该修改您的方法,使其返回一个double,该double分配给程序主方法中的值
我也很好奇为什么要使用while循环来检查true。我认为,如果输入的值无法转换为double,则您的程序很可能会遇到无限循环。double是一个原语,因此它是按值传递的,而不是按引用传递的。
double
是一个原语Double
是一个对象…对象引用也通过值传递。使用具有相同算法的Double不会改变任何东西。@DNA抱歉,这是一个大写错误,只是用于以大写字母开头我的句子。我知道基元类型可以做什么,这就是我目前所熟悉的,Double,从我所知道的是一个类,例如:Double.parseDouble(scanner.nextLine());代码>而双十进制=5.6
对于它能做什么是非常原始的。我不完全理解的是“通过引用传递”以及我如何在代码中执行它。我认为这不会起作用,可能是一种变体,但在我的程序中,public double tryCatchNum(double value){….return value;}
是我对主方法double origAmount=tryCatchNum(origAmount)
的理解。另外,其他人谈论的double和double是什么?很抱歉重复发布,但我将标题改为public double
,而不是public void
,然后我删除了中断
和used返回值代码>发生了完全相同的事情-无论输入是什么,它的计算结果都是“$0.0”。好的,我找到了分辨率。这很简单,但它巧妙地围绕着你的结论。我所要做的就是在main
中编写:origAmount=tryCatchNum(origAmount)代码>这只是一个粗心的错误。我想这就是try-catch的重点,我希望它循环,直到知道输入是有效的。然后我break代码>在循环外,我之所以选择这种方式,是因为在我看来,当我将此用作try-and-catch方法的捷径时,为while循环设置标志太复杂了。