扫描仪上的数字类型

时间:2018-10-31 14:38:17

标签: java

我制作了一个简单的程序,该程序基于公式中的3个数字来计算增量。但是,小数点后的分数和数字(例如3.33、3 / 4)存在问题。如果我用任何字母代替它,则会出现错误:

  

线程“主”中的异常java.util.InputMismatchException在   java.base / java.util.Scanner.throwFor(Scanner.java:939)在   java.base / java.util.Scanner.next(Scanner.java:1594)位于   java.base / java.util.Scanner.nextInt(Scanner.java:2258)在   java.base / java.util.Scanner.nextInt(Scanner.java:2212)在   Main.main(Main.java:11)​​

如何添加补丁程序才能使程序正常运行?我的代码如下:

import attr

@attr.s(auto_attribs=True)
class Parent:
    name: str
    age: int
    ugly: bool = False

    def print_name(self):
        print(self.name)

    def print_age(self):
        print(self.age)

    def print_id(self):
        print(f"The Name is {self.name} and {self.name} is {self.age} year old")

@attr.s(auto_attribs=True)
class Child(Parent):
    school: str
    ugly: bool = True

2 个答案:

答案 0 :(得分:2)

如果要接受输入数字为十进制,则应使用float or double类型。例如

double n1;
n1 = reader.nextDouble();

关于分数的情况,您应该使用String类型,然后将其转换为数字类型。例如

    String tmp;
    Scanner reader= new Scanner(System.in).useLocale(Locale.US);
    System.out.print("calculation of the delta. Enter the first number (a from the formula)");
    tmp = reader.next();
    n1 = fractionToDouble(tmp);
    tmp = reader.next();
    n2 = fractionToDouble(tmp);
....

添加fractionToDouble转换方法。参考:mishadoff's answer

static double fractionToDouble(String ratio) {
        if (ratio.contains("/")) {
            String[] rat = ratio.split("/");
            return Double.parseDouble(rat[0]) / Double.parseDouble(rat[1]);
        } else {
            return Double.parseDouble(ratio);
        }
    }

答案 1 :(得分:1)

将int更改为双首

<Pivot IsTabStop="False">
    <PivotItem Header="Test">
        <StackPanel Spacing="10">
            <Button Content="Button 1" IsTabStop="True"/>
            <Button Content="Button 2" IsTabStop="False"/>
        </StackPanel>
    </PivotItem>
</Pivot>

,您需要设置Locale.us来解决此InputMismatchException。否则,它可以使用“,”或其他字符作为十进制分隔符。这样可以解决您的十进制问题

 final double n1; //a
 final double n2; //b
 final double n3; //c

 n1 = reader.nextDouble();
 n2 = reader.nextDouble();
 n3 = reader.nextDouble();