&引用;“主要”;java.util.InputMismatchException
每当我试图编译它时,它总是给我一个异常: 这是我的源代码:&引用;“主要”;java.util.InputMismatchException,java,Java,每当我试图编译它时,它总是给我一个异常: 这是我的源代码: Scanner input = new Scanner(System.in); DecimalFormat df = new DecimalFormat("#.##"); System.out.print("Gaji Pokok (x 10.000) : "); double gaji = input.nextDouble(); System.out.print("Lama Tahun Kerja : "); int th = i
Scanner input = new Scanner(System.in);
DecimalFormat df = new DecimalFormat("#.##");
System.out.print("Gaji Pokok (x 10.000) : ");
double gaji = input.nextDouble();
System.out.print("Lama Tahun Kerja : ");
int th = input.nextInt();
System.out.print("Lama Bulan Kerja : ");
float bl = input.nextFloat();
if ( bl > 12)
{
System.out.println("Inputan bulan anda salah");
System.out.print("Masukkan kembali bulan yang benar : ");
float blnnew = input.nextFloat();
float tukar = blnnew;
bl = tukar;
}
float fak_peng;
fak_peng = Float.valueOf(df.format((th+(bl/12))*2.5));
System.out.print("Jumlah Faktor Penghargaan : " );
System.out.println(fak_peng + " %");
System.out.println("Nilai Sekarang : 1.0000000 " );
float per_mppeg;
per_mppeg = Float.valueOf(df.format(gaji*(fak_peng/100)*1));
System.out.print("Perhitungan MP Pegawai : " );
System.out.println(gaji + " x " + fak_peng + "% x " + " 1.0000000 = Rp." + (per_mppeg) + "(x 10.000)");
System.out.print("MP Perbulan : " );
System.out.println(per_mppeg + " + 100% = Rp." + (per_mppeg) + "(x 10.000)");
System.out.println("MP sekaligus 100% : ");
float peserta;
peserta = Float.valueOf(df.format(100.6650*per_mppeg));
float jd;
jd = Float.valueOf(df.format(14.4820*per_mppeg*0.8));
float anak;
anak = Float.valueOf(df.format(0.6090*per_mppeg*0.8));
float jml;
jml = Float.valueOf(df.format(peserta+jd+anak));
System.out.println(" Peserta = 100.6650 x "+ per_mppeg + " = " + peserta + "(x 10.000)");
System.out.println(" Jd/Dd = 14.4820 x "+ per_mppeg + " x 80% = " + jd + "(x 10.000)" );
System.out.println(" Anak = 0.6090 x "+ per_mppeg + " x 80% = " + anak + "(x 10.000)");
System.out.println("Jumlah Total = "+ jml);
float mpdua;
mpdua = Float.valueOf(df.format (jml*0.2)) ;
float mpdel;
mpdel = Float.valueOf(df.format(per_mppeg*0.8)) ;
System.out.println("MP Sekaligus 20% = "+ mpdua + "(x 10.000)");
System.out.println("MP sekaligus 80% = "+ mpdel + "(x 10.000)");
您的异常不是编译时错误/异常;这是一个运行时异常。抛出它是因为扫描仪正在读取的内容无法转换为您要求的类型(例如,扫描仪应该读取的下一个内容是“hello”,但您正在使用
scanner.nextInt()
,因为“hello”无法转换为整数,它将引发InputMismatchException)
在您的情况下,请求双人时会引发异常。可能您使用了错误的语法。您应该检查系统用于表示双精度的语法。例如,在某些系统上,双精度的小数部分和整数部分应该用,
分隔,在其他系统上用
分隔。因此,第一类系统的一半应写为0,5
,而第二类系统的一半应写为0.5
。
在Java中,扫描程序使用的语法是通过实例定义的。
您可以检查扫描仪使用的方法,并使用该方法进行更改
因此,您应该重新检查您作为输入提供的内容
除了double格式的问题外,您正在以一种不协调的方式创建DecimalFormat(请参见下面最后一段引语),如果您不注意所使用的区域设置实例,还有一行可能会引发异常(NumberFormatException):
fak_peng=Float.valueOf(df.format((th+(bl/12))*2.5))代码>
当您使用自己的格式解析十进制(new DecimalFormat(“#.#########
”)时,将传递给Float.valueOf
方法的字符串将取决于用于创建DecimalFormat
对象df
(在代码示例中,您没有使用特定的Locale
实例,因此使用了系统默认的Locale
实例)。但是Float.valueOf
希望其参数使用Java定义的特定语法™ 语言规格与您的系统无关,如中所述:
[…]其中,Sign、FloatingPointLiteral、hexnumeric、HexDigits、SignedInteger和FloatTypeSuffix是在Java的词汇结构部分中定义的™ 语言规范,但数字之间不接受下划线。如果s的形式不是FloatValue,则引发NumberFormatException
(完整文本太大,此处包含的内容太多。请遵循或遵循上面的内容,以获得有关符号、FloatingPointLiteral、hexnumeric、HexDigits、SignedInteger、FloatTypeSuffix和FloatValue确切表示的内容的更多信息)
如果要更改DecimalFormat
对象中使用的区域设置
实例,请阅读
要获取特定区域设置(包括默认区域设置)的NumberFormat,请调用NumberFormat的工厂方法之一,如getInstance()。通常,不要直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能返回DecimalFormat以外的子类
在API中(紧跟在引号之前的链接),它们给出了一个示例,说明如何正确创建NumberFormat
的实例
祝您好运!您的异常不是编译时错误/异常;而是运行时异常。引发该异常是因为扫描仪正在读取的内容无法转换为您要求的类型(例如,扫描仪应该读取的下一个内容是“hello”,但您正在使用scanner.nextInt()
,即“hello”)无法转换为整数(它将引发InputMismatchException)
在您的情况下,请求双精度时会引发异常。可能您使用了错误的语法。您应该检查系统用于表示双精度的语法。例如,在某些系统上,双精度的小数部分和整数部分应该用,
分隔,而在其他系统上则用
分隔。因此,一个ha第一种系统上的lf应写为0,5
,而第二种系统上的lf应写为0.5
。
在Java中,扫描程序使用的语法是通过实例定义的。
您可以检查扫描仪使用的方法,并使用该方法进行更改
因此,您应该重新检查您作为输入提供的内容
除了double格式的问题外,您正在以一种不协调的方式创建DecimalFormat(请参见下面最后一段引语),如果您不注意所使用的区域设置实例,还有一行可能会引发异常(NumberFormatException):
fak_peng=Float.valueOf(df.format((th+(bl/12))*2.5));
当您使用自己的格式解析十进制(new DecimalFormat(“#.#########
”)时,将传递给Float.valueOf
方法的字符串将取决于用于创建DecimalFormat
对象df
(在代码示例中,您没有使用特定的Locale
实例,因此使用了系统默认的Locale
实例)。但是Float.valueOf
希望其参数使用Java定义的特定语法™ 语言规格与您的系统无关,如中所述:
[…]其中,Sign、FloatingPointLiteral、hexnumeric、HexDigits、SignedInteger和FloatTypeSuffix是在Java的词汇结构部分中定义的™ 语言规范,但数字之间不接受下划线。如果s的形式不是FloatValue,则引发NumberFormatException
(完整文本太大,此处包含的内容太多。请遵循或遵循上面的内容,以了解有关符号、浮点文字、十六进制数字、十六进制数字、SignedInteger、浮点类型后缀和浮点值的详细信息。)