负数的输出总是-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的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C++ 使用模数时输出负数?

R中向量及其负数的所有组合

如何取负数的任意幂

单元测试

C ++中带负数的模数[重复]

怎么在python中判断是不是为负数?