首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能帮我处理这个运行时错误吗?

有人能帮我处理这个运行时错误吗?
EN

Stack Overflow用户
提问于 2021-12-20 09:13:19
回答 4查看 66关注 0票数 -2

我创建了一个程序,它使用用户输入的两个坐标,计算梯度,并在函数增加或减小时进行注释,就像在数学函数中一样。每当我输入9/4 .I格式的分数时,就会出现运行时错误。

代码语言:javascript
复制
import java.util.*;
public class mathfunctions {
public static void main(String[] args) {
Scanner coordinates = new Scanner (System.in).useLocale(Locale.US);
System.out.println("Enter 2nd y-coordinate:");

Double y2 = coordinates.nextDouble();

System.out.println("Enter 1st y-coordinate:");
Double y1 = coordinates.nextDouble();
System.out.println("Enter 2nd x-coordinate:");
Double x2 = coordinates.nextDouble();
System.out.println("Enter 1st x-coordinate:");

Double x1 = coordinates.nextDouble();
double numerator= (y2-y1);
double denominator= (x2-x1);
double gradient= numerator/denominator;
if
(numerator==0){
 System.out.print("Math Error!!!"); 
}
else{
System.out.print("Gradient=");
System.out.println(gradient);
}
if 
(gradient<0){
  System.out.println("The function is decreasing");    
}
else{
  System.out.println("The function is increasing");
}
  }
/*****************************************
This simple code is used to calculate the slope/gradient also referred to rate of change
*****************************************/
}

误差

代码语言:javascript
复制
java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:876)
    at java.util.Scanner.next(Scanner.java:1502)
    at java.util.Scanner.nextDouble(Scanner.java:2433)
    at com.mathfunctions.mathfunctions.main(mathfunctions.java:8)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.duy.android.compiler.java.Java.run(Java.java:115)
    at com.duy.ide.javaide.run.activities.ExecuteActivity.executeDex(ExecuteActivity.java:147)
    at com.duy.ide.javaide.run.activities.ExecuteActivity.exec(ExecuteActivity.java:124)
    at com.duy.ide.javaide.run.activities.ExecuteActivity.access$100(ExecuteActivity.java:45)
    at com.duy.ide.javaide.run.activities.ExecuteActivity$1.run(ExecuteActivity.java:88)
    at java.lang.Thread.run(Thread.java:764)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-12-20 09:45:57

因此,您得到的例外是java.util.InputMismatchException --基本上是告诉您,用户的输入与预期的输入不匹配,这也是@SuppaGonzalo也注意到的。

通过查看出现在异常下面的堆栈跟踪,可以很容易地找到错误的位置:

代码语言:javascript
复制
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:876)
at java.util.Scanner.next(Scanner.java:1502)
at java.util.Scanner.nextDouble(Scanner.java:2433)
at com.mathfunctions.mathfunctions.main(mathfunctions.java:8) <-- THIS LINE IS IMPORTANT
at java.lang.reflect.Method.invoke(Native Method)
at com.duy.android.compiler.java.Java.run(Java.java:115)
at com.duy.ide.javaide.run.activities.ExecuteActivity.executeDex(ExecuteActivity.java:147)
at com.duy.ide.javaide.run.activities.ExecuteActivity.exec(ExecuteActivity.java:124)
at com.duy.ide.javaide.run.activities.ExecuteActivity.access$100(ExecuteActivity.java:45)
at com.duy.ide.javaide.run.activities.ExecuteActivity$1.run(ExecuteActivity.java:88)
at java.lang.Thread.run(Thread.java:764)

正如您在堆栈跟踪中看到的那样,您正在第8行调用mathFunctions类的

代码语言:javascript
复制
at java.util.Scanner.nextDouble(Scanner.java:2433) <-- THE METHOD WE'RE CALLING.
at com.mathfunctions.mathfunctions.main(mathfunctions.java:8) <-- THE LINE WE ARE CALLING NEXTDOUBLE ON.

您已经成功地输入了nextDouble,这很好,但是用户输入的输入是而不是a Double,因此抛出InputMismatchException

如果查看您提供的代码,您在第8行上没有任何内容,这是因为您没有共享整个代码,您似乎忽略了包部分;如果您在错误中添加了这个部分,那么这一行就是:Double y2 = coordinates.nextDouble();

从你所说的,你已经进入了9/4的一小部分,这不是一个Double,所以不会被nextDouble()解析。

您可能需要的是这样的东西,将您的分数转换为Double

代码语言:javascript
复制
public static Double convertFractionToDouble(String fraction) throws ParseException {
    if (fraction != null) {
        if (fraction.contains("/")) {
            String[] numbers = fraction.split("/");
            if (numbers.length == 2) {
                BigDecimal numerator = BigDecimal.valueOf(Double.valueOf(numbers[0]));
                BigDecimal denominator = BigDecimal.valueOf(Double.valueOf(numbers[1]));
                BigDecimal response = numerator.divide(denominator, MathContext.DECIMAL128);
                return response.doubleValue();
            }
        } else {
            return Double.valueOf(fraction);
        }
    }
    throw new ParseException(fraction, 0);
}

并称之为:

代码语言:javascript
复制
Double y2 = convertFractionToDouble(coordinates.next());

我可能会向convertFractionToDouble方法添加一些更多的验证,但这是您想要的一般想法。

票数 0
EN

Stack Overflow用户

发布于 2021-12-20 09:20:24

当用户输入与预期输入不匹配时,通常会引发此异常。我认为你不应该提供分数格式的输入。不要使用(9/4)格式输入,只需使用2.25。

票数 1
EN

Stack Overflow用户

发布于 2021-12-20 10:47:18

输入错误的原因是您的输入在编程中无效,在这种情况下,您必须用这样的点来表示分数号: 9/4 => 2.25

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70419594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档