将整数的每个数字存储到arraylist java中

cuxqih21  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(407)

我正在尝试制作一个digits方法来存储在arraylistdigitlist中传入的num的数字。我不是除以10得到模数,而是将整数num转换为字符串,并尝试使用charat存储每个数字。但我必须将其转换回整数以将其存储在arraylist中,并为如何执行该操作而努力。
非常感谢你!

class Digits{

 ArrayList<Integer>digitList;

Digits(int num) {
    String StringN = Integer.toString(num);
    int index = 0;
    new ArrayList<Integer>(); 
    for(int i=0;i<StringN.length();i++) {

        // convert the charAt(i) to integer here?

        digitList.add(index, StringN.charAt(i)); 

        index++;
    }

      }
 }

 public class digitListclass {

public static void main(String[] args) {

}

 }
w46czmvw

w46czmvw1#

热释光;博士

使用unicode代码点而不是 char ,作为最佳实践。

"1234567890"
        .codePoints()
        .map( 
            ( int codePoint ) -> Integer.parseInt( Character.toString( codePoint ) ) 
        )
        .boxed()
        .toList()

[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

字符已过时

这个 char 类型已过时,无法表示unicode中定义的一半字符。虽然这种类型适用于严格意义上的阿拉伯数字,但我们应该养成使用代码点整数而不是数字的习惯 char 键入值。

代码点流

将文本作为代码点编号的最简单方法是调用 String#codePoints 得到一个 IntStream ,一股 int 基本值。对于数字 1 ,我们得到了49号码 2 代码点50,以此类推 0 被分配到代码点48。
对于每个 int 表示一个代码点编号,将其转换为指定给该编号的字符 String 对象。所以49变成“1”,50变成“2”,依此类推。
然后将每个数字作为字符串解析为 int 数字值的值。抛出 NumberFormatException 如果字符串不是可解析整数。
通过呼叫 .boxed ,我们将每个 int 将数字转换为 Integer 对象。
最后,我们收集 Integer 将每个数字表示为不可修改的 List . 这个 Stream#toList 方法在Java16中是新的。对于早期的java,使用 .collect( Collectors.toList() ) .

List < Integer > digits =
        "1234567890"
                .codePoints()
                .map( codePoint -> Integer.parseInt( Character.toString( codePoint ) ) )
                .boxed()
                .toList();

下面是一个完整的工作示例类 main 方法。

package work.basil.demo.text;

import java.util.List;

public class App2
{
    public static void main ( String[] args )
    {
        List < Integer > digits =
                "1234567890"
                        .codePoints()
                        .map( codePoint -> Integer.parseInt( Character.toString( codePoint ) ) )
                        .boxed()
                        .toList();

        System.out.println( "digits = " + digits );
    }
}

当你跑的时候。
数字=[1,2,3,4,5,6,7,8,9,0]

lsmd5eda

lsmd5eda2#

这也许对你有帮助-

import java.util.ArrayList;
import java.util.List;

public class Test {
  List<Integer> toList(int num) {
    String stringNumber = Integer.toString(num);
    List<Integer> result = new ArrayList<Integer>(stringNumber.length());
    for(int i = 0; i < stringNumber.length(); i ++) {
      result.add(Integer.valueOf(stringNumber.substring(i, i + 1)));
    }
    return result;
  }

  public static void main(String[] args) {
    System.out.println(new Test().toList(1234567890));
  }
}
oxiaedzo

oxiaedzo3#

我认为您的代码中存在一些问题:
你的初始化方式 digitList 不正确,因为它没有分配给任何变量。你应该:

this.digitList = new ArrayList<>();

我想你有多余的 index 为你的循环变量,因为它似乎没有得到任何地方使用。你应该把它取下来用它 i .
你应该保留你的类变量 private 默认情况下 final 如果他们不应该被改变。使用getter和setter访问变量。
我修改了你的代码如下:

class Digits {
    private final ArrayList<Integer> digitList;

    public Digits(int num) {
        this.digitList = new ArrayList<>();
        initDigitList(num);
    }

    private void initDigitList(int num) {
        String stringN = Integer.toString(num);
        for (int i = 0; i < stringN.length(); i++) {
            // convert the charAt(i) to integer here?
            digitList.add(i, stringN.charAt(i) - '0');
        }
    }

    public List<Integer> getDigitList() {
        return this.digitList;
    }
}

我用这段代码测试了它,它似乎可以工作:

Digits first = new Digits(512);
Digits second = new Digits(1024);

// Prints First Digit: [5, 1, 2]
System.out.println("First Digit: " + first.getDigitList().toString());
// Prints Second Digit: [1, 0, 2, 4]
System.out.println("Second Digit: " + second.getDigitList().toString());

相关问题