gpt4 book ai didi

java - 可以输入整数,为什么还要输入字符串,然后解析成整数呢?

转载 作者:行者123 更新时间:2023-12-01 12:42:03 25 4
gpt4 key购买 nike

这可能是一个非常基本的问题,但我真的不明白这样做的目的。相当疯狂地猜测这可能是效率或性能、安全强度(但我真的不明白其目的)

最佳答案

好吧,从技术上来说,从技术和文字的角度来看,您正在输入数值。但是,这些数值被定义为字符 - 字母、数字、符号,甚至还有一些非打印符号。

对于计算机来说,一切都是数字。但是,它们有一种特殊的方式来表示数字结构,例如整数或有理数/实数等等。

您不能直接输入数字的主要原因是您输入的数字以另一种方式表示其他含义。您必须将数字从任何编码(ASCII 或 UTF-8 或其他编码)转换,并在适当的数字构造中赋予它值。

以字符“0”为例。它的代码点值(UTF-8 和可能的 ASCII 格式)为 48。如果我们在其字面代码点值处取“0”,我们的数学计算结果将是不稳定的*。

还有一种情况是,您不只是输入数字 - 您还输入其他字母、符号和(如果您没有 UTF-8,上帝会帮助您)s̈́̊̄̂ͯ̍ͤo̓̃̈̈́-c̑̋a̅ll̑̓̒ͪͦ̚e̓ͭ̔̋́̚d ͛̄ͧͯ"ͬͭ̎͆Z̋̓̈̈́a͗̇̑l͑̒ͣ̌̈́̚g̋ͦ͑o͆̉̍ͮiͩ̽̎̌̾͆͛z͂̾̓ͯͭe̋ͪ̀͆̇ͪ͂d̄ͫ"̾ͮ̎̽ ̔̿̽ͬC̑͂ͬ͒J̇̔ͤK̇ͩ̂̇͑ c͒̈̾ş͌͒ͪ̂ͪa̽ͣ̃̑r͂̓͛͑̐ác̉ͨ̉͆͆ͦ̄t̃ͮ̋̓̚eͧ̽͋ͬ̀ ͮr͋͋͑ͩͦ̐̅sͯͬ͋͛ͬ́!̓ͤ̌ͯ̃ͫ̀!̐̇ͫ́!͒͂̏͆̌诚̃ͦ̓͛̉̚

再说一遍,这些对于计算机来说都是数字,但这些数字对计算机的含义与对您的含义不同。

为了简单起见,用户与计算机的主要交互将是输入字符串,因为数字不能完全传达单词或短语,除非一个人专门讲和读二进制文件(同样,必须将其翻译成其他人可以阅读的文字)。

*:对于加法和减法,结果会相差 48,但这会让乘法和除法真正令人兴奋。

<小时/>

综上所述,我们举一个简单的例子:我们需要将输入“012817”转换为某种数字。我们假设基数为 10(0 到 9)。

作为一台计算机,我认为这会出现:

48, 49, 50, 56, 49, 55

由于 48 将是我们的零,所以我们可以有把握地说,每当我们遇到希望转换为实际数字的字符时,我们都会从中减去 48。简单!

48 - 48, 49 - 48, 50 - 48, 56 - 48, 49 - 48, 55 - 48
0, 1, 2, 8, 1, 7

由于前导零在基数 10 中没有意义,因此它被丢弃,我们现在可以将其存储在数字结构中:

12817

如果您输入非数字会发生什么?好吧,考虑到这些数字是连续的*,我们可以将 10 加到 48,并知道 58 是我们将遇到的最大的以 10 为基数的数字。这为我们提供了一个方便的属性 - 如果我们的字符与 48 之间的差异大于 58,我们就无法将其放入数字构造**。我们应该爆发、提示、发牢骚,并给用户这个友好的异常(exception):

Exception in thread "main" java.lang.NumberFormatException: For input string: "A"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at com.stackoverflow.sandbox.Formatting.main(Formatting.java:19)

如果您使用的是 16 进制(0 到 9,A 到 F,不区分大小写),您可以在允许的范围内有更多的余地。如果您知道“A”和“a”从哪里开始(分别为 65 和 97),则可以扩展转换算法以遵循包含字母 A 任一情况的值,最多包含包含以下任一情况的值字母 F。

*:至少在 ASCII 和 UTF-8 中是这样。其他数字系统的其他编码可能会有所不同。

**:同样,我们讨论的是基数 10。更高的基数可能允许您添加更多字符,但这取决于您的转换算法。我故意保持简单以说明基础知识。

关于java - 可以输入整数,为什么还要输入字符串,然后解析成整数呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25007763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com