首页 > 解决方案 > (Java)为什么 Integer.toOctalString() 函数有时能正常工作,有时不能?(详情请看我的程序)

问题描述

我目前正在开发一个关于添加八进制数的程序,我需要使用Integer.toOctalString()函数将我的十进制更改为八进制,如下所示:Integer.toOctalString(5 + 3) 这将返回正确的答案"10"但是对于这个Integer.toOctalString(221 + 2)它不会返回223而是一个奇怪的337?我该如何解决它,这是我的程序。这是问题的图片,很难解释,所以在这里在此处输入图像描述 谢谢

package first_try;
import java.io.IOException;
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class main {
    public static void main(String[] args) throws IOException {
    int s, d, r;
    Scanner k = new Scanner(System.in);
    ArrayList<Integer> data1 = new ArrayList<>(3);
    ArrayList<Integer> data2 = new ArrayList<>(3);
    ArrayList<Integer> data3 = new ArrayList<>(3);
    ArrayList<Integer> data4 = new ArrayList<>(3);
    ArrayList<Integer> data5 = new ArrayList<>(3);

    for(int i = 0; i < 3; i++)
        data1.add(k.nextInt());
    for(int i = 0; i < 3; i++)
        data2.add(k.nextInt());
    for(int i = 0; i < 3; i++)
        data3.add(k.nextInt());
    for(int i = 0; i < 3; i++)
        data4.add(k.nextInt());
    for(int i = 0; i < 3; i++)
        data5.add(k.nextInt());

    ArrayList<Integer> result = new ArrayList<>(5);
    result.add(Calculation(data1.get(0),data1.get(1),data1.get(2)));
    result.add(Calculation(data2.get(0),data2.get(1),data2.get(2)));
    result.add(Calculation(data3.get(0),data3.get(1),data3.get(2)));
    result.add(Calculation(data4.get(0),data4.get(1),data4.get(2)));
    result.add(Calculation(data5.get(0),data5.get(1),data5.get(2)));
    System.out.println(result);


}

public static int Calculation(int s, int d, int r)
{


    int num = r*(1+r)/2;
    ArrayList<String> output = new ArrayList<String>(num);
    ArrayList<Integer> answer = new ArrayList<Integer>();
    int sum = 0;
    int number = 0;
    for(int i = 0; i < num-1; i++)
    {
        output.add(Integer.toOctalString(s+d));
        s += d;
    }

    for(int j = 0; j < r; j++)
    {
        number = Integer.parseInt(output.get((output.size()-1) - j));

        while (number > 0) {
            answer.add(number%10);
            number = number / 10;
        }

    }


    for(int key : answer)
        sum += key;

    return sum;

}

}

我现在使用的测试数据是

SAMPLE INPUT:    SAMPLE OUTPUT:
2 3 5            1. 36
221 2 4          2. 38
1 4 20           3. 230
10 10 10         4. 99
3245 5 11        5. 178

但我得到的输出是

36
48 
230 
115
208

标签: javafunction

解决方案


Java SE 规范包含指向所有Java 语言规范版本的链接

请参阅有关整数文字的部分,例如在Java 8 版本中。

221 是十进制整数文字,而 0_221 是八进制文字。因此,您的 java 代码将 221 解释为十进制而不是八进制。


推荐阅读