如何在Java中的try-catch中获得异常?

如何在Java中的try-catch中获得异常?,java,Java,所以我正在制作一个程序,我想要一个例外,这样程序就不会崩溃。 如果用户输入的字符串不在else If语句中,则不会崩溃 另外,我尝试对整数执行此操作,因此如果有人试图编写非整数的内容,它不会崩溃。程序会捕捉到它,并会说它不是一个整数 如何在java中的try-catch中获得异常 谢谢你的帮助 代码如下: import java.util.InputMismatchException; import java.util.Scanner; public class WeightOnADiff

所以我正在制作一个程序,我想要一个例外,这样程序就不会崩溃。
如果用户输入的字符串不在
else If语句中,则不会崩溃

另外,我尝试对
整数
执行此操作,因此如果有人试图编写非
整数
的内容,它不会崩溃。程序会捕捉到它,并会说它不是一个
整数

如何在
java
中的
try-catch
中获得异常

谢谢你的帮助

代码如下:

import java.util.InputMismatchException;
import java.util.Scanner; 


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


System.out.println("Where do you want to travel:?");
try{
     String planetName = scan.nextLine(); 
 }
 catch(/*need help here*/){
     System.out.println("Please check your spelling");
 }



 System.out.println("Please enter your weight:"); 
 try{
     int weight = scan.nextInt(); 
 }
 catch(InputMismatchException e)
 {
    System.out.println("That is not an integer"); 
 }
 double earthCalculation = weight * 1.0; 
 double jupiterCalculation = weight * (21.0 / 8.0); //check
 double marsCalculation = weight * (3.0 / 8.0); 
 double mercuryCalculation = weight * (3.0 / 10.0); 
 double neptuneCalculation = weight * (11.0 / 10.0); //check 
 double plutoCalculation = weight * (7.0 / 10.0); 
 double saturnCalculation = weight * (6.0 / 5.0); //check
 double uranusCalculation = weight * (9.0 / 10.0); 
 double venusCalculation = weight * (7.0 / 8.0);


 if (planetName.equalsIgnoreCase("Earth")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+earthCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Jupiter"))
 {
   System.out.println("Your weight on "+planetName+" is: "+jupiterCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Mars")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+marsCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Mercury")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+mercuryCalculation+" pounds."); 
 } 
 else if (planetName.equalsIgnoreCase("Neptune")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+neptuneCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Pluto")) 
 {
    System.out.println("Your weight on "+planetName+" is: "+plutoCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Saturn")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+saturnCalculation+" pounds."); 
 }
  else if (planetName.equalsIgnoreCase("Uranus")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+uranusCalculation+" pounds."); 
 } 
   else if (planetName.equalsIgnoreCase("Venus")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+venusCalculation+" pounds."); 

 }


     }
   }    
}

我相信
scan.nextInt()
无论如何只扫描一个整数,因此不需要捕获非整数

您的程序有几个问题:

  • String planetName
    需要在try块之外声明

  • 您不应该使用
    planetName=scan.nextLine()在try/catch中。你应该找到一种方法,不断向用户询问行星名称,直到他们得到一个合适的名称

  • 另外,
    int权重
    需要在try块之外声明

  • 同样,如果用户没有给你一个整数(例如,你得到一个异常),你需要想出一种方法,不断地向用户询问一个整数


编辑:根据MasterBlaster的建议,您还应该使用
scan.close()

关闭扫描仪。您实际上不需要使用异常。您可以为planet输入任何内容,它不会崩溃,因为您正在检查
nextLine()
。对于重量,只需在设置重量之前检查scan.hasNextInt()

import java.util.Scanner; 


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

        System.out.print("Where do you want to travel? ");
        String planetName = scan.nextLine(); 

        System.out.print("Please enter your weight: ");
        int weight = 0;
        if (scan.hasNextInt()) {
            weight = scan.nextInt();

            double earthCalculation = weight * 1.0; 
            double jupiterCalculation = weight * (21.0 / 8.0); //check
            double marsCalculation = weight * (3.0 / 8.0); 
            double mercuryCalculation = weight * (3.0 / 10.0); 
            double neptuneCalculation = weight * (11.0 / 10.0); //check 
            double plutoCalculation = weight * (7.0 / 10.0); 
            double saturnCalculation = weight * (6.0 / 5.0); //check
            double uranusCalculation = weight * (9.0 / 10.0); 
            double venusCalculation = weight * (7.0 / 8.0);

            if (planetName.equalsIgnoreCase("Earth")) {
                System.out.println("Your weight on " + planetName + " is: " + earthCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Jupiter")) {
                System.out.println("Your weight on " + planetName + " is: " + jupiterCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Mars")) {
                System.out.println("Your weight on " + planetName + " is: " + marsCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Mercury")) {
                System.out.println("Your weight on " + planetName + " is: " + mercuryCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Neptune")) {
                System.out.println("Your weight on " + planetName + " is: " + neptuneCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Pluto")) {
                System.out.println("Your weight on " + planetName + " is: " + plutoCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Saturn")) {
                System.out.println("Your weight on " + planetName + " is: " + saturnCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Uranus")) {
                System.out.println("Your weight on " + planetName + " is: " + uranusCalculation + " pounds."); 
            } else if (planetName.equalsIgnoreCase("Venus")) {
                System.out.println("Your weight on " + planetName + " is: " + venusCalculation + " pounds."); 
            } else {
                System.out.println("Planet not recognized");
            }
        } else {
            System.out.println("Invalid weight");
        }
        scan.close();
    }
}

所以我最终修复了它,结果如下。 导入java.util.InputMismatchException; 导入java.util.Scanner

public class WeightOnADifferentPlanet { 
static Scanner scan = new Scanner ( System.in ); 

public static void main ( String[] args ){   



System.out.println("What planet do you want to travela:?");

     String planetName = scan.nextLine(); 



 System.out.println("Please enter your weight:"); 
 int weight = Integer();


 //int weight = scan.nextInt();


 double earthCalculation = weight * 1.0; 
 double jupiterCalculation = weight * (21.0 / 8.0); //check
 double marsCalculation = weight * (3.0 / 8.0); 
 double mercuryCalculation = weight * (3.0 / 10.0); 
 double neptuneCalculation = weight * (11.0 / 10.0); //check 
 double plutoCalculation = weight * (7.0 / 10.0); 
 double saturnCalculation = weight * (6.0 / 5.0); //check
 double uranusCalculation = weight * (9.0 / 10.0); 
 double venusCalculation = weight * (7.0 / 8.0);


 if (planetName.equalsIgnoreCase("Earth")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+earthCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Jupiter"))
 {
   System.out.println("Your weight on "+planetName+" is: "+jupiterCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Mars")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+marsCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Mercury")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+mercuryCalculation+" pounds."); 
 } 
 else if (planetName.equalsIgnoreCase("Neptune")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+neptuneCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Pluto")) 
 {
    System.out.println("Your weight on "+planetName+" is: "+plutoCalculation+" pounds."); 
 }
 else if (planetName.equalsIgnoreCase("Saturn")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+saturnCalculation+" pounds."); 
 }
  else if (planetName.equalsIgnoreCase("Uranus")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+uranusCalculation+" pounds."); 
 } 
   else if (planetName.equalsIgnoreCase("Venus")) 
 {
   System.out.println("Your weight on "+planetName+" is: "+venusCalculation+" pounds."); 

 }
   else {
       System.out.println("Planet not recognized");
   }
 }



 public static int Integer(){
      while (true)
      {
       try
       {
        return scan.nextInt();
       }
       catch (InputMismatchException e)
       {
           scan.next();
           System.out.print("That’s not an integer. Try again: ");
       }

}
}
}

最后别忘了防止资源泄漏。非常感谢您的帮助。但是对于整数,我需要程序给出一个错误消息,而不是它停止。因此,我最终在一个新方法的try-catch中放入了一个异常,并将其返回给程序