负数的输出总是-3
Posted
技术标签:
【中文标题】负数的输出总是-3【英文标题】:Output of a negative is always -3 【发布时间】:2021-11-20 18:47:33 【问题描述】:我一直在尝试将一串数字转换为一个数组,但是每当它在字符串的开头检测到负数时,它就会变为-3。有人知道怎么修这个东西吗?这是 3 Sum 问题的一部分,我必须在需要输入 .txt 数字的地方完成。
例如,当它收到数字 519718 时,结果是 [5,1,9,7,1,8]
但是,当它收到数字 -972754 时,结果是 [-3,9,7,2,7,5,4]
我希望它变成 [-9,7,2,7,5,4]
下面是代码
public static void main(String[] args)
BufferedReader objReader = null;
try
String strCurrentLine;
objReader = new BufferedReader(new FileReader("D:\\TokenNumbersData.txt"));
while ((strCurrentLine = objReader.readLine()) != null)
int[] arr = new int[strCurrentLine.length()];
for (int i = 0; i < strCurrentLine.length(); i++)
arr[i] = strCurrentLine.charAt(i) - '0';
System.out.println(Arrays.toString(arr));
【问题讨论】:
提示:你认为'-'
这个字符的数值是多少?如果从中减去'0'
的数值会发生什么?
【参考方案1】:
首先,将字符串解析为int
数组的功能作为单独的函数/方法来实现是有意义的。
其次,如果-
符号可能只出现在输入字符串的开头,则可以使用一个标志并更改字符串中索引的计算:
public static int[] getDigits(String str)
if (str == null || str.isEmpty())
return new int[0];
int hasNegative = str.charAt(0) == '-' ? 1 : 0;
int[] result = new int[str.length() - hasNegative];
for (int i = 0; i < result.length; i++)
result[i] = Character.getNumericValue(str.charAt(i + hasNegative));
if (i == 0 && hasNegative != 0)
result[i] *= -1;
return result;
测试:
System.out.println("-972754 -> " + Arrays.toString(getDigits("-972754")));
System.out.println(" 567092 -> " + Arrays.toString(getDigits("567092")));
输出:
-972754 -> [-9, 7, 2, 7, 5, 4]
567092 -> [5, 6, 7, 0, 9, 2]
【讨论】:
以上是关于负数的输出总是-3的主要内容,如果未能解决你的问题,请参考以下文章