Làm thế nào để có được các chữ số riêng biệt của một số int?


143

Tôi có các số như 1100, 1002, 1022, v.v. Tôi muốn có các chữ số riêng lẻ, ví dụ cho số đầu tiên 1100 tôi muốn có 1, 1, 0, 0.

Làm thế nào tôi có thể lấy nó trong Java?

Câu trả lời:


204

Để làm điều này, bạn sẽ sử dụng %toán tử (mod).

int number; // = some int

while (number > 0) {
    print( number % 10);
    number = number / 10;
}

Toán tử mod sẽ cung cấp cho bạn phần còn lại của phép chia int trên một số.

Vì thế,

10012 % 10 = 2

Bởi vì:

10012 / 10 = 1001, remainder 2

Lưu ý: Như Paul đã lưu ý, điều này sẽ cung cấp cho bạn các số theo thứ tự ngược lại. Bạn sẽ cần đẩy chúng lên một chồng và bật chúng theo thứ tự ngược lại.

Mã để in các số theo đúng thứ tự:

int number; // = and int
LinkedList<Integer> stack = new LinkedList<Integer>();
while (number > 0) {
    stack.push( number % 10 );
    number = number / 10;
}

while (!stack.isEmpty()) {
    print(stack.pop());
}

4
Tuy nhiên, điều này sẽ giúp bạn lấy các số theo thứ tự sai, do đó, bạn sẽ phải chắc chắn và đẩy chúng lên một ngăn xếp hoặc chỉ cần đặt chúng vào một mảng theo thứ tự ngược lại.
Paul Tomblin

4
Lưu ý rằng điều này mang lại cho họ từ phải sang trái. (Ví dụ của OP cho thấy chúng từ trái sang phải). Đủ đơn giản để xử lý, nhưng nó cần được lưu ý.
James Curran

1
@Don, trong thực tế, không. Tôi sẽ không ủng hộ điều này. Đó là cách nhanh hơn so với phiên bản dựa trên chuỗi. Tôi sẽ xem xét câu trả lời của Marimuthu cho một số mã nhanh và ngắn.
jjnguy

2
Giải pháp tuyệt vời nhưng có vẻ như nó không xử lý được kịch bản khi số bắt đầu bằng các số 0 đứng đầu. ví dụ: 001122. Nếu tôi sử dụng logic trên - tôi sẽ chỉ nhận được 1,1,2,2. Các số 0 hàng đầu được giảm theo% và / thao tác. Xin hãy sửa tôi nếu tôi sai.
gidelshub1509

2
Còn số nguyên âm ở đây thì sao? nếu tôi vượt qua -3432, đầu ra sẽ là -2-3-4-3 không chính xác.
Nodir Nasirov

75

Chuyển đổi nó Stringvà sử dụng String#toCharArray()hoặc String#split().

String number = String.valueOf(someInt);

char[] digits1 = number.toCharArray();
// or:
String[] digits2 = number.split("(?<=.)");

Trong trường hợp bạn đã có trên Java 8 và bạn tình cờ muốn thực hiện một số thao tác tổng hợp trên đó sau đó, hãy cân nhắc sử dụng String#chars()để thoát IntStreamkhỏi nó.

IntStream chars = number.chars();

7
Đây là cách nhanh chóng và bẩn thỉu.
jjnguy

8
Với split(""), mục đầu tiên trong mảng là "". Sử dụng regex khác, như split("(?<=.)").
True Soft

3
toCharArray nhanh hơn nhiều so với chia. Tôi chỉ cần đặt cả hai trong một vòng lặp 1000 lần và toCharArray mất 20ms và tách ra mất 1021ms. Tôi cũng đã thực hiện nó một cách toán học bằng cách chia cho mười với mod (%) và phải mất 50ms để làm theo cách đó, vì vậy toCharArray dường như nhanh hơn hai phần còn lại.
Jerry Destremps

2
Chỉnh sửa: Tôi vừa mới làm lại, lần này với các vòng lặp dài hơn để đảm bảo (10.000 lần lặp). toCharArray nhanh hơn khoảng 100 lần so với chia và toCharArray nhanh hơn khoảng 5 lần so với phương pháp toán mô đun.
Jerry Destremps

9
@BalusC number.chars()sẽ trả về kết quả trong các giá trị Ascii không phải là số. Vì vậy, số "1234" sẽ được chia thành "49", "50", "51", "52" thay vì "1", "2", "3", "4". Để làm điều đó đúng, nó sẽ giống như:IntStream chars = number.chars().map(Character::getNumericValue);
Koin Arab

29

Còn cái này thì sao?

public static void printDigits(int num) {
    if(num / 10 > 0) {
        printDigits(num / 10);
    }
    System.out.printf("%d ", num % 10);
}

hoặc thay vì in ra bàn điều khiển, chúng ta có thể thu thập nó trong một mảng các số nguyên và sau đó in mảng:

public static void main(String[] args) {
    Integer[] digits = getDigits(12345);
    System.out.println(Arrays.toString(digits));
}

public static Integer[] getDigits(int num) {
    List<Integer> digits = new ArrayList<Integer>();
    collectDigits(num, digits);
    return digits.toArray(new Integer[]{});
}

private static void collectDigits(int num, List<Integer> digits) {
    if(num / 10 > 0) {
        collectDigits(num / 10, digits);
    }
    digits.add(num % 10);
}

Nếu bạn muốn duy trì thứ tự các chữ số từ ít nhất có ý nghĩa (chỉ số [0]) đến đáng kể nhất (chỉ mục [n]), thì getDigits () được cập nhật sau đây là những gì bạn cần:

/**
 * split an integer into its individual digits
 * NOTE: digits order is maintained - i.e. Least significant digit is at index[0]
 * @param num positive integer
 * @return array of digits
 */
public static Integer[] getDigits(int num) {
    if (num < 0) { return new Integer[0]; }
    List<Integer> digits = new ArrayList<Integer>();
    collectDigits(num, digits);
    Collections.reverse(digits);
    return digits.toArray(new Integer[]{});
}

1
Đó là một cách tốt để in mọi thứ theo đúng thứ tự bằng cách sử dụng mod. +1
jjnguy

1
Thật là đẹp Tôi đã suy nghĩ: "Phải có một cách để đảo ngược trật tự mà không cần sử dụng Bộ sưu tập ...." +1
bobndrew

Hoàn hảo. Có thể muốn thêm mã sau vào getDigits (int num) để làm cho nó miễn nhiễm với các đầu vào xấu: if (number < 0) { return new Integer[0]; } Đã thử nghiệm với các đầu vào sau:Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
realPK

24

Tôi chưa thấy ai sử dụng phương pháp này, nhưng nó hiệu quả với tôi và ngắn gọn và ngọt ngào:

int num = 5542;
String number = String.valueOf(num);
for(int i = 0; i < number.length(); i++) {
    int j = Character.digit(number.charAt(i), 10);
    System.out.println("digit: " + j);
}

Điều này sẽ xuất ra:

digit: 5
digit: 5
digit: 4
digit: 2

Thật là kinh ngạc. Cảm ơn
Marwa Eltayeb 26/03/19

Vì một số lý do, logic này cung cấp đầu ra sai cho các số khác nhau hơn 5542. Ví dụ: thử: 0142323
tavalendo

@tavalendo 0142323là hằng số bát phân bằng 50387, do số 0 đứng đầu, giống như 0x100là hằng số thập lục phân bằng 256, do giá trị hàng đầu 0x0b1011là hằng số nhị phân bằng 11với giá trị hàng đầu 0b. Hãy cảnh giác với việc dẫn 0 trên các hằng số nguyên!
AJNeufeld

12

Tôi nhận thấy rằng có một vài ví dụ về việc sử dụng luồng Java 8 để giải quyết vấn đề của bạn nhưng tôi nghĩ rằng đây là cách đơn giản nhất:

int[] intTab = String.valueOf(number).chars().map(Character::getNumericValue).toArray();

Để rõ ràng: Bạn sử dụng String.valueOf(number)để chuyển đổi int thành String, sau đó chars()phương thức để lấy IntStream (mỗi char từ chuỗi của bạn bây giờ là số Ascii), sau đó bạn cần chạy map()phương thức để lấy giá trị số của số Ascii. Cuối cùng, bạn sử dụng toArray()phương thức để thay đổi luồng của bạn thành một mảng int [].


11

Tôi thấy tất cả các câu trả lời là xấu xí và không sạch sẽ.

Tôi đề nghị bạn sử dụng một chút đệ quy để giải quyết vấn đề của bạn. Bài đăng này rất cũ, nhưng nó có thể hữu ích cho các lập trình viên tương lai.

public static void recursion(int number) {
    if(number > 0) {
        recursion(number/10);
        System.out.printf("%d   ", (number%10));
    }
}

Đầu ra:

Input: 12345

Output: 1   2   3   4   5 

Chết tiệt, bạn đang nói về câu trả lời. Cảm ơn.
phân tích cú pháp

6
// could be any num this is a randomly generated one
int num = (int) (Math.random() * 1000);

// this will return each number to a int variable
int num1 = num % 10;
int num2 = num / 10 % 10;
int num3 = num /100 % 10;

// you could continue this pattern for 4,5,6 digit numbers
// dont need to print you could then use the new int values man other ways
System.out.print(num1);
System.out.print("\n" + num2);
System.out.print("\n" + num3);

Kiểu int Java có giá trị tối thiểu -2 ^ 31 và giá trị tối đa là 2 ^ 31-1. Làm thế nào giải pháp trên có thể hoạt động cho tất cả các giá trị + ve phù hợp với kiểu int?
realPK

3

Cách dễ dàng hơn tôi nghĩ là chuyển đổi số thành chuỗi và sử dụng substringđể trích xuất và sau đó chuyển đổi thành số nguyên.

Một cái gì đó như thế này:

int digits1 =Integer.parseInt( String.valueOf(201432014).substring(0,4));
    System.out.println("digits are: "+digits1);

dự kiến ​​là 2014


chuyển đổi loại ở đây sẽ chi phí nhiều hơn hoặc hoạt động phân chia?
Rahul

2

Tôi đã viết một chương trình trình bày cách phân tách các chữ số của một số nguyên bằng cách sử dụng một cách tiếp cận đơn giản và dễ hiểu hơn, không liên quan đến mảng, thu hồi và tất cả các sơ đồ lạ mắt đó. Đây là mã của tôi:

int year = sc.nextInt(), temp = year, count = 0;

while (temp>0)
{
  count++;
  temp = temp / 10;
}

double num = Math.pow(10, count-1);
int i = (int)num;

for (;i>0;i/=10)
{
  System.out.println(year/i%10);
}

Giả sử đầu vào của bạn là số nguyên 123, đầu ra kết quả sẽ như sau:

1
2
3

2

Đây là câu trả lời của tôi, tôi đã tự làm điều đó và tôi hy vọng nó đủ đơn giản cho những ai không muốn sử dụng phương pháp Chuỗi hoặc cần một giải pháp toán học hơn:

public static void reverseNumber2(int number) {

    int residual=0;
    residual=number%10;
    System.out.println(residual);

    while (residual!=number)  {
          number=(number-residual)/10;
          residual=number%10;
          System.out.println(residual);
    }
}

Vì vậy, tôi chỉ cần lấy các đơn vị, in chúng ra, trừ chúng ra khỏi số, sau đó chia số đó cho 10 - luôn luôn không có bất kỳ nội dung nổi nào, vì các đơn vị đã biến mất, lặp lại.


2

giải pháp đơn giản

public static void main(String[] args) {
    int v = 12345;
    while (v > 0){
        System.out.println(v % 10);
        v /= 10;
    }
}

1

Thử cái này:

int num= 4321
int first  =  num % 10;
int second =  ( num - first ) % 100 / 10;
int third  =  ( num - first - second ) % 1000 / 100;
int fourth =  ( num - first - second - third ) % 10000 / 1000;

Bạn sẽ nhận được đầu tiên = 1, thứ hai = 2, thứ ba = 3 và thứ tư = 4 ....


Điều này ít tiện dụng và thanh lịch hơn các phương pháp chung được liệt kê ở trên, về nguyên tắc cũng không khác so với các câu trả lời khác %. Nó thêm ít giá trị.
Shawn Mehan

@Shawn Mehan, tôi sẽ không đồng ý. Các phương thức trên chủ yếu là về việc sử dụng String hoặc về các giải pháp nhiều dòng dài, trong khi phương pháp này đơn giản và đơn giản.
phân tích cú pháp

1

Giải pháp Java 8 để lấy các chữ số là int [] từ một số nguyên mà bạn có dưới dạng Chuỗi:

int[] digits = intAsString.chars().map(i -> i - '0').toArray();

Tôi đã thử điều này và nó không hoạt động. Bạn có thể chỉ cần thử "12" .chars (). ToArray () và bạn sẽ thấy rằng thay vì trả về [1,2], nó trả về [49,50] mà tôi đoán thực sự là mã ASCII cho '1' và '2', và đó chắc chắn không phải là điều OP muốn.
Fran Marzoa

@Fran bạn nói đúng. Tôi đã cập nhật câu trả lời của mình để bao gồm một i -> i - '0'ánh xạ để kết quả chính xác là những gì OP yêu cầu.
qben

Thay vì sử dụng i - '0', cũng có những phương pháp như Character.toDigitIMO tốt hơn để sử dụng.
Simon Forsberg

@SimonForsberg bạn có thể tham khảo phương thức trong các tài liệu và đưa ra một đoạn mã làm thế nào nó sẽ hoạt động không? Tôi rất vui khi cập nhật câu trả lời của mình nếu có cách thanh lịch hơn.
qben

@qben "0123456789".chars().map(i -> Character.digit(i, 10)).toArray() Ký tự # chữ số (có một cho char và một cho int codePoints)
Simon Forsberg

1

cũng không chars() phải codePoints() - lambda khác

String number = Integer.toString( 1100 );

IntStream.range( 0, number.length() ).map( i -> Character.digit( number.codePointAt( i ), 10 ) ).toArray();  // [1, 1, 0, 0]

1

Java 9 đã giới thiệu một Stream.iteratephương thức mới có thể được sử dụng để tạo luồng và dừng ở một điều kiện nhất định. Điều này có thể được sử dụng để có được tất cả các chữ số trong số, sử dụng phương pháp modulo.

int[] a = IntStream.iterate(123400, i -> i > 0, i -> i / 10).map(i -> i % 10).toArray();

Lưu ý rằng điều này sẽ có được các chữ số theo thứ tự ngược lại, nhưng điều đó có thể được giải quyết bằng cách lặp qua mảng ngược (đáng buồn là đảo ngược một mảng không đơn giản ) hoặc bằng cách tạo một luồng khác:

int[] b = IntStream.iterate(a.length - 1, i -> i >= 0, i -> i - 1).map(i -> a[i]).toArray();

hoặc là

int[] b = IntStream.rangeClosed(1, a.length).map(i -> a[a.length - i]).toArray();

Ví dụ, mã này:

int[] a = IntStream.iterate(123400, i -> i > 0, i -> i / 10).map(i -> i % 10).toArray();
int[] b = IntStream.iterate(a.length - 1, i -> i >= 0, i -> i - 1).map(i -> a[i]).toArray();
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));

Sẽ in:

[0, 0, 4, 3, 2, 1]
[1, 2, 3, 4, 0, 0]

0

Integer.toString (1100) cung cấp cho bạn số nguyên dưới dạng chuỗi. Integer.toString (1100) .getBytes () để lấy một mảng byte của các chữ số riêng lẻ.

Biên tập:

Bạn có thể chuyển đổi các chữ số ký tự thành chữ số, do đó:

  String string = Integer.toString(1234);
  int[] digits = new int[string.length()];

  for(int i = 0; i<string.length(); ++i){
    digits[i] = Integer.parseInt(string.substring(i, i+1));
  }
  System.out.println("digits:" + Arrays.toString(digits));

Điều này hơi sai lệch. Điều này sẽ cung cấp cho bạn một mảng byte đại diện cho char '1'hoặc '0'. Các giá trị byte sẽ không 1, hoặc 0.
jjnguy

Gây hiểu lầm? Đó là một chút khắc nghiệt. Câu hỏi mơ hồ. Nó thực sự phụ thuộc vào những gì anh ấy muốn làm với các chữ số. Bạn đang cho rằng anh ta muốn thực hiện các tính toán. Câu trả lời của tôi giả định xử lý văn bản. Giả định là đúng một phần, nhưng đó không phải là ý định của tôi để đánh lừa.
Don Branson

Tôi đoán tôi cảm thấy nó sai lệch bởi vì bạn nhận được một mảng byte, mà tôi nghĩ rằng các số không phải là ký tự.
jjnguy

@Justin - À, được rồi. Tôi không tự động liên kết byte như không phải ký tự. Trong những ngày lắp ráp, tôi đã tăng 'a' để có được 'b', lặp qua bảng chữ cái - vì vậy đôi khi các byte đồng thời là cả hai. Tất nhiên, các ngôn ngữ cấp cao và UTF hiển thị tất cả.
Don Branson

0

Điều này sử dụng phương thức modulo 10 để tìm ra mỗi chữ số trong một số lớn hơn 0, sau đó điều này sẽ đảo ngược thứ tự của mảng. Điều này giả sử bạn không sử dụng "0" làm chữ số bắt đầu.

Điều này được sửa đổi để đưa vào đầu vào của người dùng. Mảng này ban đầu được chèn ngược, vì vậy tôi phải sử dụng lệnh Collections.reverse()gọi để đưa nó trở lại trật tự của người dùng.

    Scanner scanNumber = new Scanner(System.in);
    int userNum = scanNumber.nextInt(); // user's number

    // divides each digit into its own element within an array
    List<Integer> checkUserNum = new ArrayList<Integer>();
    while(userNum > 0) {
        checkUserNum.add(userNum % 10);
        userNum /= 10;
    }

    Collections.reverse(checkUserNum); // reverses the order of the array

    System.out.print(checkUserNum);

0

Chỉ để xây dựng chủ đề, đây là cách xác nhận số đó là số nguyên palindromic trong Java:

public static boolean isPalindrome(int input) {
List<Integer> intArr = new ArrayList();
int procInt = input;

int i = 0;
while(procInt > 0) {
    intArr.add(procInt%10);
    procInt = procInt/10;
    i++;
}

int y = 0;
int tmp = 0;
int count = 0;
for(int j:intArr) {
    if(j == 0 && count == 0) {
    break;
    }

    tmp = j + (tmp*10);
    count++;
}

if(input != tmp)
    return false;

return true;
}

Tôi chắc chắn rằng tôi có thể đơn giản hóa thuật toán này hơn nữa. Tuy nhiên, đây là nơi tôi đang có. Và nó đã làm việc theo tất cả các trường hợp thử nghiệm của tôi.

Tôi hi vọng điêu nay se giup được ai đo.


0
int number = 12344444; // or it Could be any valid number

int temp = 0;
int divider = 1;

for(int i =1; i< String.valueOf(number).length();i++)
 {

    divider = divider * 10;

}

while (divider >0) {

    temp = number / divider;
    number = number % divider;
    System.out.print(temp +" ");
    divider = divider/10;
}

12344444 là lớn để là một int.
Giuseppe Garassino

@Beppe 12344444 không quá lớn để trở thành một int. Các tài liệu Java tuyên bố như sau Đối với int, từ -2147483648 đến 2147483647, bao gồm Mặc dù biết chắc chắn trên hệ thống của bạn, bạn có thể sử dụng System.out.println (Integer.MAX_VALUE); để tìm ra max_value được hỗ trợ trong gói java.lang của bạn
OrwellHindenberg

0
public int[] getDigitsOfANumber(int number) {
    String numStr = String.valueOf(number);
    int retArr[] = new int[numStr.length()];

    for (int i = 0; i < numStr.length(); i++) {
        char c = numStr.charAt(i);
        int digit = c;
        int zero = (char) '0';
        retArr[i] = digit - zero;

    }
    return retArr;
}

1
Vui lòng cập nhật câu trả lời của bạn và giải thích cách giải quyết vấn đề. Các câu trả lời chỉ có mã thường được coi là câu trả lời kém chất lượng.
devlin cẩm chướng

0

xem dưới đề xuất của tôi với ý kiến

          int size=i.toString().length(); // the length of the integer (i) we need to split;
           ArrayList<Integer> li = new ArrayList<Integer>(); // an ArrayList in whcih to store the resulting digits

        Boolean b=true; // control variable for the loop in which we will reatrive step by step the digits
        String number="1"; // here we will add the leading zero depending on the size of i
        int temp;  // the resulting digit will be kept by this temp variable

    for (int j=0; j<size; j++){
                        number=number.concat("0");
                    }

Integer multi = Integer.valueOf(number); // the variable used for dividing step by step the number we received 
                while(b){

                    multi=multi/10;
                    temp=i/(multi);
                    li.add(temp);
                    i=i%(multi);
                                        if(i==0){
                                        b=false;
                                        }


                }

                for(Integer in: li){
                    System.out.print(in.intValue()+ " ");
                }

0

Một cái gì đó như thế này sẽ trả lại char[]:

public static char[] getTheDigits(int value){
    String str = "";
    int number = value;
    int digit = 0;
    while(number>0){
        digit = number%10;
        str = str + digit;
        System.out.println("Digit:" + digit);
        number = number/10;     

    }
    return str.toCharArray();
}

0

Là một người mới, câu trả lời của tôi sẽ là:

String number = String.valueOf(ScannerObjectName.nextInt()); 
int[] digits = new int[number.length()]; 
for (int i = 0 ; i < number.length() ; i++)
    int[i] = Integer.parseInt(digits.substring(i,i+1))

Bây giờ tất cả các chữ số được chứa trong mảng "chữ số".


0

Tại sao bạn không làm:

String number = String.valueOf(input);
char[] digits = number.toCharArray();

0

Vì tôi không thấy một phương thức cho câu hỏi này sử dụng Java 8, tôi sẽ đưa nó vào. Giả sử rằng bạn đang bắt đầu với một Stringvà muốn có một List<Integer>, thì bạn có thể truyền phát các phần tử như vậy.

List<Integer> digits = digitsInString.chars()
        .map(Character::getNumericValue)
        .boxed()
        .collect(Collectors.toList());

Điều này nhận các ký tự Stringdưới dạng a IntStream, ánh xạ các biểu diễn số nguyên của các ký tự thành một giá trị số, đóng hộp chúng và sau đó thu thập chúng vào một danh sách.


Điều thú vị là các ký tự () trả về một IntStream để nếu bạn gọi boxed () và coll (), bạn có thể trả về Danh sách các số nguyên ngay lập tức.
Jason

1
Bạn nhận lại giá trị ASCII. Vì vậy, 1 bản đồ đến 49.
ifly6

Hấp dẫn! Không biết điều đó, ty.
Jason

Không biên dịch: Collectors.toList()→ " Loại không khớp: không thể chuyển đổi từ Collector <Object, chụp # 3-of ?, Danh sách <Object >> sang Nhà cung cấp <R> ", collect→ " Thu thập phương thức (Nhà cung cấp <R>, ObjIntConsumer <R >, BiConsumer <R, R>) trong loại IntStream không áp dụng cho các đối số (Collector <Object,?, List <Object >>) "
Gerold Broser

Đã chỉnh sửa. Họ cần phải được đóng hộp trước khi thu thập. Xem ví dụ: repl.it/@ifly6/HeftyAffectionateHertz#Main.java
ifly6

-1

Tôi nghĩ rằng đây sẽ là cách hữu ích nhất để có được chữ số:

public int[] getDigitsOf(int num)
{        
    int digitCount = Integer.toString(num).length();

    if (num < 0) 
        digitCount--;           

    int[] result = new int[digitCount];

    while (digitCount-- >0) {
        result[digitCount] = num % 10;
        num /= 10;
    }        
    return result;
}

Sau đó, bạn có thể nhận được các chữ số một cách đơn giản:

int number = 12345;
int[] digits = getDigitsOf(number);

for (int i = 0; i < digits.length; i++) {
    System.out.println(digits[i]);
}

hoặc đơn giản hơn:

int number = 12345;
for (int i = 0; i < getDigitsOf(number).length; i++) {
    System.out.println(  getDigitsOf(number)[i]  );
}

Lưu ý phương thức cuối cùng gọi phương thức getDigitsOf quá nhiều thời gian. Vì vậy, nó sẽ chậm hơn. Bạn nên tạo một mảng int và sau đó gọi phương thức getDigitsOf một lần, giống như trong khối mã thứ hai.

Trong đoạn mã sau, bạn có thể đảo ngược để xử lý. Mã này đặt tất cả các chữ số lại với nhau để tạo thành số:

public int digitsToInt(int[] digits)
{
    int digitCount = digits.length;
    int result = 0;

    for (int i = 0; i < digitCount; i++) {
        result = result * 10;
        result += digits[i];
    }

    return result;
}

Cả hai phương pháp tôi đã cung cấp hoạt động cho các số âm quá.


-1
import java.util.Scanner;

class  Test 
{  
    public static void main(String[] args)   
    {  
        Scanner sc = new Scanner(System.in); 


    int num=sc.nextInt(); 
    System.out.println("Enter a number (-1 to end):"+num);
    int result=0;
    int i=0;
    while(true) 
    { 
      int n=num%10;
      if(n==-1){
        break;
      }
      i++;
      System.out.println("Digit"+i+" = "+n);
      result=result*10+n;
      num=num/10; 


      if(num==0) 
      { 
        break; 
      } 
    }
    }
}


Câu trả lời là CHO → [link] stackoverflow.com/questions/47196499/ cấp
always007

-1

trong Java, đây là cách bạn có thể tách các chữ số khỏi các số và lưu trữ chúng trong một mảng.

public static void main(String[] args) {
        System.out.println("Digits Array:: "+Arrays.toString(getNumberArr(1100)));
}

private static Integer[] getNumberArr(int number) {
    //will get the total number of digits in the number
    int temp = number;
    int counter = 0;

    while (temp > 0) {
        temp /= 10;
        counter++;
    }
    //reset the temp
    temp = number;

    // make an array
    int modulo;     //modulo is equivalent to single digit of the number.
    Integer[] numberArr = new Integer[counter];
    for (int i = counter - 1; i >= 0; i--) {
        modulo = temp % 10;
        numberArr[i] = modulo;  
        temp /= 10;
    }

    return numberArr;
}

Đầu ra:

Digits Array:: [1, 1, 0, 0]

-1

nếu chữ số có nghĩa là một Character

String numstr = Integer.toString( 123 );
Pattern.compile( "" ).splitAsStream( numstr ).map(
  s -> s.charAt( 0 ) ).toArray( Character[]::new );  // [1, 2, 3]

Pattern.compile? Đó là rất nhiều quá mức cần thiết.
Simon Forsberg

-3
import java.util.Scanner;

public class SeparatingDigits {

    public static void main( String[] args )
    {

        System.out.print( "Enter the digit to print separately :- ");
        Scanner scan = new Scanner( System.in );

        int element1 = scan.nextInt();
        int divider;

        if( ( element1 > 9999 ) && ( element1 <= 99999 ) )
        {
            divider = 10000;
        }
        else if( ( element1 > 999 ) && ( element1 <= 9999 ) )
        {
            divider = 1000;
        }
        else if ( ( element1 > 99) && ( element1 <= 999 ) )
        {
            divider = 100;
        }
        else if( ( element1 > 9 ) && ( element1 <= 99 ) )
        {
            divider = 10;
        }
        else 
        {
            divider = 1;
        }

        quotientFinder( element1, divider );




    }

     public static void quotientFinder( int elementValue, int dividerValue )
     {
         for( int count = 1;  dividerValue != 0; count++)
         {
            int quotientValue = elementValue / dividerValue ;
            elementValue = elementValue % dividerValue ;
            System.out.printf( "%d  ", quotientValue );

            dividerValue /= 10;

         }
     }
    }

Không sử dụng mảng và chuỗi. (chữ số 1-99999)

đầu ra:

Nhập chữ số để in riêng: - 12345

1 2 3 4 5


Phải có một cách để xác định năng động và hiệu quả hơn divider.
ZX9
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.