Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何将整数分解为数字_Java_Integer_Int - Fatal编程技术网

Java-如何将整数分解为数字

Java-如何将整数分解为数字,java,integer,int,Java,Integer,Int,我是新手。我正在为面试练习数据结构和算法。我被困在这种情况下,基本上它需要将一个整数(如615)分解为它的数字(如6、1、5)。我确实在网上找到了一个解决方案,但是我觉得必须有一个更好更简单的方法来做到这一点 这是我找到的解决方案- int total = sum1 + sum2; //This is the number we want to split Integer totalInt = new Integer(total); String strSum = totalInt.toS

我是新手。我正在为面试练习数据结构和算法。我被困在这种情况下,基本上它需要将一个整数(如615)分解为它的数字(如6、1、5)。我确实在网上找到了一个解决方案,但是我觉得必须有一个更好更简单的方法来做到这一点

这是我找到的解决方案-

 int total = sum1 + sum2; //This is the number we want to split
 Integer totalInt = new Integer(total);
 String strSum = totalInt.toString();

 for (int i = 0; i < strSum.length(); i++) {
  String subChar = strSum.substring(i, i + 1);
  int nodeData = Integer.valueOf(subChar);
  newList.append(new Node(nodeData)); //irrelevant in context of question
 }

这完全取决于你要如何处理断开的数字;但举个例子,这里有一种将正整数的位数相加的方法:

int sumOfDigits = 0;
while (n > 0) {
    final int lastDigit = n % 10;    // remainder of n divided by 10
    sumOfDigits += lastDigit;
    n /= 10;                         // divide by 10, to drop the last digit
}

这完全取决于你要如何处理断开的数字;但举个例子,这里有一种将正整数的位数相加的方法:

int sumOfDigits = 0;
while (n > 0) {
    final int lastDigit = n % 10;    // remainder of n divided by 10
    sumOfDigits += lastDigit;
    n /= 10;                         // divide by 10, to drop the last digit
}

此选项适用于任何基础:

int input = yourInput;
final int base = 10; //could be anything
final ArrayList<Integer> result = new ArrayList<>();
while(input != 0) {
    result.add(input % (base));
    input = input / base;
}

如果需要对数字进行排序,以使最重要的数字位于第一位,则可以使用堆栈而不是结果变量的列表。

此选项适用于任何基:

int input = yourInput;
final int base = 10; //could be anything
final ArrayList<Integer> result = new ArrayList<>();
while(input != 0) {
    result.add(input % (base));
    input = input / base;
}
如果您需要对数字进行排序,以便最重要的数字是第一个,那么可以使用堆栈而不是结果变量的列表。

试试这个

int total = 123; //This is the number we want to split
Integer totalInt = new Integer(total);
String strSum = totalInt.toString();
String nums[] = strSum.split("");

// First element will be empty
// Changed loop initial value i to 0 from 1
for( int i = 0; i < nums.length; i++ ) {
    System.out.println(nums[i]);
    // Or if you want int from it, then
    System.out.println(Integer.parseInt(nums[i]));
}
试试这个

int total = 123; //This is the number we want to split
Integer totalInt = new Integer(total);
String strSum = totalInt.toString();
String nums[] = strSum.split("");

// First element will be empty
// Changed loop initial value i to 0 from 1
for( int i = 0; i < nums.length; i++ ) {
    System.out.println(nums[i]);
    // Or if you want int from it, then
    System.out.println(Integer.parseInt(nums[i]));
}

使方法多用途的一种方法是使其成为拆分器。这意味着它可以生成一个可用于任何目的的整数流:求和,将它们添加到列表中,等等

如果您不熟悉拆分器,下面是一个示例:

public class Digitiser implements Spliterators.OfInt {
    private int currentValue;
    private final int base;
    public Digitiser(int value, int base) {
        currentValue = value;
        this.base = base;
    }
    public boolean tryAdvance(IntConsumer action) {
        if (currentValue == 0) {
            return false;
        } else {
            int digit = value % base;
            value /= base;
            action.accept(digit);
            return true;
        }
    }
    public static IntStream stream(int value, int base) {
        return StreamSupport.intStream(new Digitiser(value, base), false);
}
现在,您有了一个通用的数字化器,可以用来做各种事情:

Digitiser.stream(13242, 10).sum();
Digitiser.stream(42234, 2).collect(Collectors.toList());

使方法多用途的一种方法是使其成为拆分器。这意味着它可以生成一个可用于任何目的的整数流:求和,将它们添加到列表中,等等

如果您不熟悉拆分器,下面是一个示例:

public class Digitiser implements Spliterators.OfInt {
    private int currentValue;
    private final int base;
    public Digitiser(int value, int base) {
        currentValue = value;
        this.base = base;
    }
    public boolean tryAdvance(IntConsumer action) {
        if (currentValue == 0) {
            return false;
        } else {
            int digit = value % base;
            value /= base;
            action.accept(digit);
            return true;
        }
    }
    public static IntStream stream(int value, int base) {
        return StreamSupport.intStream(new Digitiser(value, base), false);
}
现在,您有了一个通用的数字化器,可以用来做各种事情:

Digitiser.stream(13242, 10).sum();
Digitiser.stream(42234, 2).collect(Collectors.toList());

您可以使用ToCharray:

char[] digits = strSum.toCharArray();
然后,将其转换为int[]:

int[] numbers = new int[digits.length]; 

for (int i = 0; i < numbers.length; i++) {
    numbers[i] = digits[i] - '0';
}

您可以使用ToCharray:

char[] digits = strSum.toCharArray();
然后,将其转换为int[]:

int[] numbers = new int[digits.length]; 

for (int i = 0; i < numbers.length; i++) {
    numbers[i] = digits[i] - '0';
}

那么@BogdanKuštan yea呢?我想了一下,但问题是它会将数字存储为字符,我们希望它们保持整数。有意义吗?所以可以使用Character.getNumericValueelement.charAt0;还是这些很贵?我不太擅长Java,但这是一种干净的方式,不知道它有多快。关于@BogdanKuštan yea,我有点考虑过,但问题是它将数字存储为字符,我们希望它们保持int。有意义吗?所以可以使用Character.getNumericValueelement.charAt0;还是这些很贵?我不太擅长Java,但这是一种干净的方式,我不知道它有多快。这是可行的,但我想把这些数字保持为int而不是char。char[]将它们存储为char…任何解决方案?为什么要将数字存储为整数?因为这正是问题所需要的。得到这些数字后,我可能想对它们进行数学运算。如果这些数字是char格式的,我将无法这样做……因此,在toCharArray之后,您必须将结果转换为int[]。更新d答案。这是可行的,但我想把这些数字保留为int而不是char。char[]将它们存储为char…任何解决方案?为什么要将数字存储为整数?因为这正是问题所需要的。得到这些数字后,我可能想对它们进行数学运算。如果这些数字是char格式的,我将无法这样做……因此,在toCharArray之后,您必须将结果转换为int[]。更新答案。我的坏。。。我会把这个留给你看,然后在30,29,28删除评论…我的坏。。。我将把这个留给你看,然后删除30、29、28中的评论。。。。