我教初级程序员Java,我的许多荷兰学生在第一次使用Scanner输入浮点值时会感到困惑。
nextDouble()的默认行为是查阅计算机的语言环境设置。当设置为荷兰语时,这意味着必须使用十进制逗号。
另一方面,系统。出来PrimTLN似乎不考虑区域设置,并使用小数点。
例如,考虑以下输出(以粗体进行用户输入):
给出一个10.0以下的数字
10,5
抱歉,10.5不低于10.0
(如果输入10.5,将抛出InputMissMatchException。)上面的输出由以下片段生成
Scanner scanner = new Scanner( System.in );
double limit = 10.0;
System.out.println( "Give a number below "+limit );
double x = scanner.nextDouble();
if (x >= limit ) {
System.out.println( "Sorry, "+x+" is not below "+limit );
}
这是图书馆里的矛盾还是我用错了?
>
Scanner、NumberFormat、MessageFormat涉及本地化,有时有点尴尬。它们用于高级代码,用于用户交互。还有千分位。
一个人必须做出选择。至少使用本地化数字是一个很好的练习。或者当懒惰的时候,一个人可以使用Double.parse双
代替Scanner
或者:
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
另一个格式/值问题是使用双,这是一个近似值,没有精度,作为固定点BigDecimal。双用于快速计算,BigDecimal用于财务精度。
new BigDecimal("0.20") // Precision of 2, no loss.
0.20 // Not exactly 0.20, no precision on printing
为该调用提供的参数
System.out.println( "Sorry, "+x+" is not below "+limit );
是一个String
,它是连接一些String
文字和一些双
值的结果。
JLS声明
如果只有一个操作数表达式是字符串类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串。
然后
原始类型T
的值x
首先被转换为参考值,就像通过将其作为一个参数提供给一个合适的类实例创建表达式(§15.9):
T
是double
,则使用new double(x)
然后它接着说
否则,转换就像是通过调用引用对象的toString
方法来执行的,不带任何参数;但是如果调用toString
方法的结果是null
,则使用字符串“null”
。
双#toString
的javadoc解释了格式
返回此Double
对象的字符串表示形式。此对象表示的原语double
值被转换为字符串,就像通过一个参数的方法toString
一样。
这是重载的toString(double)
方法
返回双参数的字符串表示形式。下面提到的所有字符都是ASCII字符。
NaN
,则结果是字符串“NaN”
'-'('\u002D')
;如果符号为正,则结果中不显示符号字符。至于震级m:
m
为无穷大,则由字符表示为“无穷大”
;因此,正无穷大产生结果“无穷大”
,负无穷大产生结果“-infinity”
m
为零,则由字符“0.0”
表示;因此,负零产生结果“-0.0”
,正零产生结果“0.0”
m
大于或等于10^-3
但小于10^7
,则表示为m的整数部分,以十进制形式表示,无前导零,后跟。'('\u002E')
,后跟一个或多个代表m
小数部分的十进制数字
10^-3
或大于或等于10^7
,则用所谓的“计算机科学符号”表示设n为唯一整数,10^n≤ M
m
或a
的小数部分必须打印多少个数字?必须至少有一个数字来表示小数部分,除此之外,还需要尽可能多的数字来唯一地将参数值与双类型的相邻值区分开来。也就是说,假设x
是由该方法产生的十进制表示形式所表示的有限非零参数d
的确切数学值。然后d
必须是最接近x
的值;或者如果两个值相等地接近x
,那么d
必须是其中之一,并且d
的意义的最低有效位必须是0
。
要创建浮点值的本地化字符串表示形式,请使用
NumberFormats
的子类。
它描述了如何正确设置
double
的格式。
或者,使用
printf
并为浮点值提供适当的格式模式。
我有一个简单的Do-While循环,它使用的扫描器功能不正常。代码应该显示一个文本,提示用户输入字符串,用户输入字符串,然后程序再次显示相同的文本,并提示用户输入另一个字符串。 程序所做的是显示正确的消息,用户输入一个字符串,然后提示用户输入一个字符串,但用户输入之前没有文本。用户输入文本后,它就会正常工作。 查看我的代码,我看不出程序有任何理由在不向用户显示文本的情况下提示用户两次输入。
我写了一个小程序,它检查字符串是否按照用户输入的字母顺序排序,并用空白隔开一行。它的工作,这是伟大的,但我不明白的是,为什么我可以使用扫描器创建数组时,大小还没有设置。任何见解都将不胜感激。
我必须创建一个java类,我可以从标准控制台读取一些命令。这就像模拟网格中的运动。我很难完全创建我想要的东西。假设我有这样的命令: 从X、Y、方向开始 步子 “X”和“Y”是矩阵6x6的坐标。“方向”可以是“上”、“下”、“左”、“右”。如果我写“步骤”,我会做一步。 程序应该丢弃STEP命令,直到有效的START命令被执行。之后,我可以使用STEP或另一个有效的START命令,它将使用新的坐标将
我只是想知道为什么是java。util。扫描器实现java。util。迭代器? 实现删除方法,并抛出一个不支持的操作异常。 但是一个类在实现接口时,不应该履行接口的契约吗? 实现
因此,我是一个新的Java程序员,我正试图弄清楚为什么一段代码不能工作。我遇到的问题是“String interests=input.nextLine();”这一行,它跳过了用户的输入并跳转到下一个System.out,所以它只显示“Your Profile...”。在允许用户输入任何数据之前。抱歉,如果这是一个愚蠢的问题,我是很新的!
问题内容: boolean z = false; do { try { a = sc.nextInt(); z = true; } catch(Exception e) { } } while(!z); 试试这个。如果您第一次尝试整数,则整数将正确执行。但是,如果您输入错误的文本类型,即使您接下来输入int并跳过将布尔值分配为true的情况,也会变成无限循环。为什么是这样? 问题答案: 您的问题出