【问题标题】:Storing each digit of an integer into an ArrayList java将整数的每个数字存储到 ArrayList java
【发布时间】:2021-04-23 15:12:07
【问题描述】:

我正在尝试创建一个 Digits 方法,该方法存储在 ArrayList digitList 中传入的 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) {
    
    
    

}

 }

【问题讨论】:

  • 想告诉你什么是“digitList cannot be resolved”?
  • 我不知道,是不是我错误地声明了ArrayList?
  • 这可能会对您有所帮助:What is 'scope' in Java?。您在 main 方法中创建了一个局部变量。那个变量的作用域只有那个方法。
  • @Selina 你没有在任何地方声明digitList
  • 我编辑了我的代码!如何将 charAt(i) 存储为 digitList 中的整数

标签: java arraylist


【解决方案1】:

tl;博士

最好使用 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 已过时

char 类型已过时,甚至无法表示 Unicode 中定义的一半字符。虽然这种类型适用于严格的Arabic numerals,但我们应该养成使用code point 整数而不是char 类型值的习惯。

IntStream 的代码点

将文本用作代码点编号的最简单方法是调用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 方法是 Java 16 中的新方法。对于早期的 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]

【讨论】:

    【解决方案2】:

    这可能会对你有所帮助 -

    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));
      }
    }
    

    【讨论】:

      【解决方案3】:

      我认为你的代码有一些问题:

      1. 您初始化digitList 的方式不正确,因为它没有分配给任何变量。你应该这样做:
      this.digitList = new ArrayList<>();
      
      1. 我认为您的循环有一个多余的index 变量,因为它似乎没有在任何地方使用。您应该删除它并使用i
      2. 您应该默认保留您的类变量privatefinal 如果它们不应该被更改。使用 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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2012-10-02
        • 2014-04-13
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        相关资源
        最近更新 更多