Java 设法找到一种方法

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

我试图在过程类型方法中加入一个try-catch,但我95%确定它必须是函数类型。我试图完成的是使我的代码大体上更短。我想到的最大的事情之一就是在方法中加入一个try-catch并调用该方法

问题是,如果输入是整数或不是整数,它将验证输入-它甚至捕获异常。问题是,一旦继续使用程序/计算,它就不会“记住”已验证的输入。这是我遇到麻烦的代码部分

 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循环设置标志太复杂了。