2013-10-27 53 views
1

我应该做的是每当有人放入一个字符串而不是一个整数,比如“two”,它应该说“你必须输入正数字数据!”而不是一堆错误消息。我想我已经发现了这个声明,但我不确定要尝试。以下是我迄今为止:什么投入尝试块?

package loanpaymentfinder; 

import java.text.NumberFormat; 
import java.util.Scanner; 


public class LoanPaymentFinder { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 

     NumberFormat num = NumberFormat.getCurrencyInstance(); 

     double numInputLoan; 
     double numInputRate; 
     double numInputYears; 
     double numMonths; 
     double numRateSquared; 
     double numOutput; 
     double numRatePlusOne; 
     boolean finish = false; 

     while (true) { 

      //Input 
      System.out.print("Enter loan amount: "); 
      numInputLoan = Double.parseDouble(in.nextLine()); 
      try { 

      } catch (NumberFormatException exception) { 
       System.out.println("You must enter positive numeric data!"); 
       System.out.print("Would you like to calculate again (y/n):"); 
       String input = in.nextLine(); 
       if (input.equals("y")) { 
        continue; 
       } else if (input.equals("n")) { 
        break; 
       } 
      } 
      System.out.print("Enter rate: "); 
      numInputRate = Double.parseDouble(in.nextLine()); 

      System.out.print("Enter number of years: "); 
      numInputYears = Double.parseDouble(in.nextLine()); 

      //Checks for negitive inputs 

      if (numInputLoan <= 0) { 
       System.out.println("You must enter positive numeric data!"); 
       System.out.print("Would you like to calculate again (y/n):"); 
       String input = in.nextLine(); 
       if (input.equals("y")) { 
        continue; 
       } else if (input.equals("n")) { 
        break; 
       } 

      } else if (numInputRate <= 0) { 
       System.out.println("You must enter positive numeric data!"); 
       System.out.print("Would you like to calculate again (y/n):"); 
       String input = in.nextLine(); 
       if (input.equals("y")) { 
        continue; 
       } else if (input.equals("n")) { 
        break; 
       } 
      } else if (numInputYears <= 0) { 
       System.out.println("You must enter positive numeric data!"); 
       System.out.print("Would you like to calculate again (y/n):"); 
       String input = in.nextLine(); 
       if (input.equals("y")) { 
        continue; 
       } else if (input.equals("n")) { 
        break; 
       } 
      } else { 
       //Math goes here 
       numMonths = 12 * numInputYears; 
       numInputRate = numInputRate/1200; 
       numRatePlusOne = numInputRate + 1; 
       numRateSquared = Math.pow(numRatePlusOne, numMonths); 
       numOutput = numRateSquared/(numRateSquared - 1); 
       numOutput = numInputRate * numInputLoan * numOutput; 

       //Output 
       System.out.println("The mounthly payment is:"); 
       System.out.println(num.format(numOutput)); 
       System.out.print("Would you like to calculate again (y/n):"); 
       String input = in.nextLine(); 
       if (input.equals("y")) { 
        continue; 
       } else if (input.equals("n")) { 
        break; 
       } 
      } 
     } 
    } 
} 
+0

的导致异常的代码必须发生在TRY内部。此外,CATCH内的代码量和代码本身也是不好的做法。我没有时间来解释。 –

回答

1

这应该这样做;)

try 
    { 
     numInputLoan = Double.parseDouble (in.nextLine()); 
    } 
    catch(...) 
    ... 
1

numInputLoan = Double.parseDouble (in.nextLine());在try块。

你的代码必须

// Input 
    System.out.print("Enter loan amount: "); 

    try 
    { 
     numInputLoan = Double.parseDouble(in.nextLine()); 
    } 

in.nextLine()返回你在控制台输入了,所以当你把它解析为Double,如果有字符串,它会给NumberFormatException的,所以这部分去在尝试。也可以使用numInputLoan,否则会出现编译错误。

0

在try块中,您将任何可能导致您正在检查的异常。在这种情况下,由于您正在准备NumberFormatException,因此您可能至少要附上您称为parseDouble的语句。像这样:

try { 
    numInputLoan = Double.parseDouble (in.nextLine()); 
} 
3

在try块中,你放了一些可能出错的代码。你想尝试的东西。

看这部分代码您添加:

numInputLoan = Double.parseDouble(in.nextLine());

你想解析一个字符串为double,但是如果这个字符串包含's'例如? 它给出了一个错误,因为你不能将's'解析为double。 所以你应该尝试执行它,你可能会捕获一个错误。

结论,移动numInputLoan = Double.parseDouble(in.nextLine());到try块。

1

您需要在try区块内输入的内容是将输入(String)转换为integer的实际尝试。与C#等一些语言相反,Java没有Int.TryParse(String s)方法,因此解析的结果和后续处理应该包含在try中,以便处理错误的输入。

这就是为什么

numInputLoan = Double.parseDouble (in.nextLine()); 

应该在try块,这样,当它失败并引发Exception,该catch块可以接管。

1

一个try语句用来捕捉你的程序执行可能抛出异常。每当使用可能抛出异常的语句时,都应该使用try语句这样,如果发生异常,程序不会崩溃。

在你的代码,这可能numInputLoan = Double.parseDouble (in.nextLine());,抛出异常,从而避免崩溃你的程序,你应该在try保持这种以便在发生错误时抛出则控制进行捕捉,并从crashing.use这种方式防止

try 
{ 
numInputLoan = Double.parseDouble (in.nextLine()); 
} 
catch(Exception e) 
{ 
} 
相关问题