在为J2ME编写游戏时,我们遇到了一个使用java.lang.Integer.parseInt()的问题
我们有几个常量值定义为十六进制值,例如:
CHARACTER_RED = 0xFFAAA005;
Run Code Online (Sandbox Code Playgroud)
在游戏过程中,值被序列化并通过网络连接接收,作为十六进制值的字符串表示形式.为了将其解析回int,我们不成功地尝试了以下内容:
// Response contains the value "ffAAA005" for "characterId"
string hexValue = response.get("characterId");
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);
Run Code Online (Sandbox Code Playgroud)
然后我运行了一些测试并尝试了这个:
string hexValue = Integer.toHexString(0xFFAAA005);
// The following throws a NumberFormatException
int value = Integer.parseInt(hexValue, 16);
Run Code Online (Sandbox Code Playgroud)
这是实际代码的例外:
java.lang.NumberFormatException: ffaaa005
at java.lang.Integer.parseInt(Integer.java:462)
at net.triadgames.acertijo.GameMIDlet.startMIDlet(GameMIDlet.java:109)
Run Code Online (Sandbox Code Playgroud)
我必须承认,这让我感到困惑.查看parseInt代码,当被解析的数字"越过""负/正边界"时,似乎抛出了NumberFormatException(也许有人可以用右边的行话来编辑?).
这是Integer.parseInt函数的预期行为吗?最后我不得不编写自己的十六进制字符串解析函数,我对提供的实现非常不满意.
换句话说,我期望让Integer.parseInt()在整数误导的十六进制字符串表示上工作吗?
编辑:在我最初的帖子中,我写了0xFFFAAA005而不是0xFFAAA005.我已经纠正了这个错误.
我在javascript中有32位整数数组.如何将其转换为十六进制字符串,并在需要时再次从该十六进制字符串构建相同的32位整数数组?
hexString = yourNumber.toString(16); 可用于将数字转换为十六进制,但是当数字数组转换为十六进制字符串(它将是连续的或由某个字符分隔)时,如何从该字符串中返回数字数组?
周二晚上Facebook的代码变化影响了parseIntFBJS的运作方式.我以前使用它将十进制数转换为直整数,现在它总是返回undefined.
例如:
return parseInt(decimalnum);
Run Code Online (Sandbox Code Playgroud)
不再有效.有人想出我们现在应该如何围绕整数?谢谢.
我有一个字符串,例如"ksl13<br>m4n",我想删除所有非数字字符,以获得int 134.
Integer.parseInt(s) 显然不会起作用,但不知道怎么回事.
我觉得我正在做一些无聊的事情.任何人都可以帮助我理解为什么以下不起作用
["1.1", "2.2", "3.3"].map(parseInt);
//=> [1, NaN, NaN]
Run Code Online (Sandbox Code Playgroud)
这虽然有效???
["1.1", "2.2", "3.3"].map(function(num) {
return parseInt(num);
});
//=> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
这似乎也有效
["1.1", "2.2", "3.3"].map(Number);
//=> [1.1, 2.2, 3.3]
Run Code Online (Sandbox Code Playgroud) 我想从中获取所选值JComboBox,在数据库中搜索并使用值中的值更新数据库中的数量JTextField.这是代码:
Object selected = jComboBox1.getSelectedItem();
String album = (String)selected;
int qty=Integer.parseInt(jTextField7.getText());
String query2="update productlist set QtyAvail=? " +
"where Album=?";
try
{
PreparedStatement ps2=con.prepareStatement(query2);
ps2.setInt(1, qty);
ps2.setString(2,album);
int res1=ps2.executeUpdate();
}
catch(Exception e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException:
For input string: " 1"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at AddProductPanel.jButton2ActionPerformed(AddProductPanel.java:341)
at AddProductPanel.access$4(AddProductPanel.java:335)
at AddProductPanel$5.actionPerformed(AddProductPanel.java:133)
Run Code Online (Sandbox Code Playgroud)
我在文本字段中输入值"1".
为什么:
parseInt(-0, 10) // 0
parseInt('-0', 10) // -0
Run Code Online (Sandbox Code Playgroud)
是否有一个明智的理由,parseInt不会为两者做-0或这只是一个奇怪的JavaScript?
我给了23(看起来像一个正确的字符串)作为输入,但stil得到NumberFormatException.请指出我哪里出错了.
PS我试图在codechef上解决"厨师和字符串问题"
相关代码:
Scanner cin=new Scanner(System.in);
cin.useDelimiter("\n");
String data=cin.next();
System.out.println(data);
/*
* @param Q no. of chef's requests
*/
String tempStr=cin.next();
System.out.println(tempStr);;
int Q = Integer.parseInt(tempStr);
Run Code Online (Sandbox Code Playgroud)
输出:
sdfgsdg
sdfgsdg
23
23
Exception in thread "main" java.lang.NumberFormatException: For input string: "23
"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Chef.RegexTestHarness.main(RegexTestHarness.java:24)
Run Code Online (Sandbox Code Playgroud)
完整计划:
package Chef;
//
//TODO codechef constraints
import java.util.Scanner;
import java.lang.*;
import java.io.*;
//TODO RETURN TYPE
class RegexTestHarness
{
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
cin.useDelimiter("\n");
String data=cin.next(); …Run Code Online (Sandbox Code Playgroud) parseInt(0.000004); //0
parseInt(0.0000004); //4
Run Code Online (Sandbox Code Playgroud)
为什么第一个parseInt()返回0,但如果我增加十进制后的零数,则给出4?
我知道我的代码可以变得更简单,更有效但我试图让它以这种方式工作.
我希望得到字符串中包含5位数字的最大数字.我想用这个subString方法.作为输出,我只得到前5个数字,并且它不会遍历字符串的其余部分.
public class thousandDigits
{
public static void main(String[] args)
{
String num = new String ("73167176531330624919225119674426574742355349194934" +
"96983520312774506326239578318016984801869478851843" +
"85861560789112949495459501737958331952853208805511" +
"12540698747158523863050715693290963295227443043557" +
"66896648950445244523161731856403098711121722383113" +
"62229893423380308135336276614282806444486645238749" +
"30358907296290491560440772390713810515859307960866" +
"70172427121883998797908792274921901699720888093776" +
"65727333001053367881220235421809751254540594752243" +
"52584907711670556013604839586446706324415722155397" +
"53697817977846174064955149290862569321978468622482" +
"83972241375657056057490261407972968652414535100474" +
"82166370484403199890008895243450658541227588666881" +
"16427171479924442928230863465674813919123162824586" +
"17866458359124566529476545682848912883142607690042" +
"24219022671055626321111109370544217506941658960408" +
"07198403850962455444362981230987879927244284909188" +
"84580156166097919133875499200524063689912560717606" +
"05886116467109405077541002256983155200055935729725" +
"71636269561882670428252483600823257530420752963450") ;
int greatest = 0;
int max = -1;
int numChar = Integer.parseInt(num.substring(0, 5));
for (int i = 0; i < num.length() …Run Code Online (Sandbox Code Playgroud)