Bir int numarasının ayrı rakamlarını nasıl alabilirim?


143

1100, 1002, 1022 vb. Sayılarım var. Bireysel rakamlara sahip olmak istiyorum, örneğin 1, 1, 0, 0 olmak istediğim ilk sayı 1100 için.

Java ile nasıl edinebilirim?

Yanıtlar:


204

Bunu yapmak için, %(mod) operatörünü kullanacaksınız .

int number; // = some int

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

Mod operatörü size bir sayı üzerinde int bölünmesi yapmanın kalanını verecektir.

Yani,

10012 % 10 = 2

Çünkü:

10012 / 10 = 1001, remainder 2

Not: Paul'un belirttiği gibi, bu size sayıları ters sırada verecektir. Onları bir yığının üzerine itmeniz ve ters sırada patlatmanız gerekir.

Numaraları doğru sırada yazdırmak için kod:

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
Ancak bu sayıları yanlış sıraya sokacaktır, bu yüzden emin olmanız ve bir yığının üzerine itmeniz veya ters sırada bir diziye koymanız gerekir.
Paul Tomblin

4
Bunun sağdan sola olduğunu unutmayın. (OP örneği onları soldan sağa göstermektedir). Basit idare etmek için yeterli, ancak not edilmelidir.
James Curran

1
@ Don, pratikte hayır. Bunu tercih etmem. Öyle yolu daha hızlı olsa dize bazlı sürümden daha. Ben bakardım Marimuthu en bazı hızlı ve kısa kod olsa cevap.
jjnguy

2
Harika bir çözüm, ancak sayı önde gelen sıfırlarla başladığında senaryoyu işlemiyor gibi görünüyor. örneğin - 001122. Yukarıdaki mantığı kullanırsam - sadece 1,1,2,2 alırım. Baştaki 0'lar% ve / işlemleri tarafından düşürülür. Yanlışım varsa lütfen düzelt.
goyalshub1509

2
burada negatif tamsayılar ne olacak? -3432'yi geçersem çıkış -2-3-4-3 olur ki bu yanlıştır.
Nodir Nasirov

75

Dönüştürün Stringve String#toCharArray()veya kullanın String#split().

String number = String.valueOf(someInt);

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

Zaten Java 8'deyseniz ve daha sonra üzerinde toplu işlemler yapmak istiyorsanız, bundan String#chars()kurtulmak için kullanmayı düşünün IntStream.

IntStream chars = number.chars();

7
Bu hızlı ve kirli bir yoldur.
jjnguy

8
İle split(""), dizideki ilk öğe olur "". Gibi başka regex kullanın split("(?<=.)").
Gerçek Yumuşak

3
toCharArray bölünmeden ÇOK daha hızlıdır. Her ikisini de 1000 kez bir döngüye koydum ve toCharArray 20ms ve split 1021ms aldı. Ben de mod (%) ile on ile bölme kullanarak matematiksel olarak yaptım ve bu şekilde yapmak 50 ms sürdü, bu yüzden toCharArray diğer ikisinden daha hızlı gibi görünüyor.
Jerry Destremps

2
Düzenleme: Sadece tekrar yaptım, bu kez daha uzun döngüler emin olmak için (10.000 iterasyon). toCharArray bölünmekten yaklaşık 100 kat, toCharArray modül matematik yönteminden yaklaşık 5 kat daha hızlıdır.
Jerry Destremps

9
@BalusC number.chars()sonucu sayısal olmayan bir Ascii değerlerinde döndürür. Böylece "1234" sayısı "1", "2", "3", "4" yerine "49", "50", "51", "52" olarak ayrılır. Doğru yapmak için şöyle görünmeli:IntStream chars = number.chars().map(Character::getNumericValue);
Koin Arab

29

Buna ne dersin?

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

veya konsola yazdırmak yerine, bir tamsayı dizisinde toplayabilir ve ardından diziyi yazdırabiliriz:

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

En az anlamlıdan (dizin [0]) en anlamlıya (dizin [n]) kadar basamakların sırasını korumak istiyorsanız, aşağıdaki güncellenmiş getDigits () ihtiyacınız olan şeydir:

/**
 * 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
Mod kullanarak işleri doğru sırada yazdırmanın iyi bir yolu. +1
jjnguy

1
Bu güzel. Düşünüyordum: "Koleksiyon kullanmadan düzeni tersine çevirmenin bir yolu olmalı ...." +1
bobndrew

Kusursuz. GetDigits'e (int num) kötü girdilere karşı bağışıklık kazandırmak için aşağıdaki kodu eklemek isteyebilirsiniz: if (number < 0) { return new Integer[0]; } Aşağıdaki girişlerle test edilmiştir:Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
realPK

24

Kimsenin bu yöntemi kullandığını görmedim, ama benim için çalıştı ve kısa ve tatlı:

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

Bu çıktı:

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

İnanılmaz. Teşekkürler
Marwa Eltayeb

Bazı nedenlerden dolayı, bu mantık 5542'den farklı sayılar için yanlış çıktı verir. Örneğin: 0142323
tavalendo

@tavalendo 0142323bir sekizlik sabite eşit olduğu 50387gibi, bağlı gelen sıfır, 0x100bir onaltılı sabit da eşit 256nedeniyle gelen için, 0xve 0b1011bir ikili sabit eşittir 11gelen nedeniyle 0b. Tamsayı sabitlerinde 0 önde olmasına dikkat edin!
AJNeufeld

12

Sorununuzu çözmek için Java 8 akışı kullanmanın birkaç örneği olduğunu fark ettim ama bunun en basit olduğunu düşünüyorum:

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

Açık olmak için: int'i String'e String.valueOf(number)dönüştürmek için kullanın , ardından chars()bir IntStream (dizenizdeki her karakter artık bir Ascii numarasıdır) map()elde etmek için yöntem kullanın, sonra Ascii numarasının sayısal değerlerini almak için yöntemi çalıştırmanız gerekir . Sonunda toArray()akışınızı bir int [] dizisine dönüştürmek için yöntem kullanırsınız .


11

Tüm cevapların çirkin ve çok temiz olmadığını görüyorum.

Sorununuzu çözmek için biraz özyineleme kullanmanızı öneririz . Bu gönderi çok eskidir, ancak gelecekteki kodlayıcılara yardımcı olabilir.

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

Çıktı:

Input: 12345

Output: 1   2   3   4   5 

Kahretsin, cevapların çirkin olmasıyla ilgilisin. Teşekkürler.
parsecer

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

Java int türünün minimum değeri -2 ^ 31 ve maksimum değeri 2 ^ 31-1'dir. Yukarıdaki çözüm, int türüne uyan tüm + ve değerleri için nasıl çalışır?
realPK

3

Bence daha kolay yolu dize numarasını dönüştürmek ve substringayıklamak ve sonra tamsayı dönüştürmek için kullanmaktır .

Bunun gibi bir şey:

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

çıkış 2014


Buradaki tür dönüşümü daha mı pahalı, yoksa bölünme işlemleri mi?
Rahul

3

basit çözüm

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

2

Dizileri, özyinelemeleri ve tüm bu fantezi şemaları içermeyen daha basit ve anlaşılır bir yaklaşım kullanarak bir tamsayının rakamlarını nasıl ayıracağını gösteren bir program yazdım. İşte benim kod:

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

Girişinizin tamsayı olduğunu varsayalım 123, sonuçta elde edilen çıktı aşağıdaki gibi olacaktır:

1
2
3

2

İşte cevabım, kendim için yaptım ve umarım String yaklaşımını kullanmak istemeyen veya daha fazla math-y çözümüne ihtiyaç duyanlar için yeterince basit:

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

Bu yüzden sadece birimleri alıyorum, yazdırıyorum, sayıdan soyutlaştırıyorum, sonra bu sayıyı 10'a bölüyorum.


1

Bunu dene:

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;

Önce = 1, ikinci = 2, üçüncü = 3 ve dördüncü = 4 alacaksınız.


Bu, yukarıda listelenen genel yöntemlerden daha az faydacı ve zariftir ve prensip olarak diğer cevaplardan daha farklı değildir %. Çok az değer katar.
Shawn Mehan

@ Shawn Mehan, katılmıyorum. Yukarıdaki yöntemler çoğunlukla String veya uzun çok çizgili çözümlerle ilgilidir, ancak bu basit ve basittir.
parsecer

1

String olarak sahip olduğunuz bir tam sayıdan basamakları int [] olarak almak için Java 8 çözümü:

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

Bunu denedim ve işe yaramıyor. Sadece "12" .chars (). ToArray () 'yı deneyebilirsiniz ve [1,2] döndürmek yerine [49,50] döndürdüğünü, aslında' 1 'için ASCII kodları olduğunu ve '2', ve kesinlikle OP'nin istediği bu değildi.
Fran Marzoa

@Fran haklısın. Cevabımı i -> i - '0', OP'nin istediği sonuç olacak şekilde bir eşleme içerecek şekilde güncelledim .
qben

Kullanmak yerine IMO'nun kullanılması daha iyi olan i - '0'yöntemler de Character.toDigitvardır.
Simon Forsberg

@SimonForsberg, dokümanlardaki yönteme başvurabilir ve bunun nasıl çalışacağına bir kod snippet'i verebilir misiniz? Daha zarif bir yol varsa cevabımı güncellediğim için mutluyum.
qben

@qben "0123456789".chars().map(i -> Character.digit(i, 10)).toArray() Karakter # basamağı (char için bir ve int codePoints için bir tane vardır)
Simon Forsberg

1

ne chars() ne codePoints() - diğer lambda

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, bir Stream.iterateakış oluşturmak ve belirli bir durumda durdurmak için kullanılabilecek yeni bir yöntem tanıttı . Bu, modulo yaklaşımını kullanarak sayıdaki tüm rakamları elde etmek için kullanılabilir.

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

Bunun rakamları ters sırada alacağını, ancak dizide geriye doğru döngü yaparak (ne yazık ki bir diziyi tersine çevirmek o kadar kolay değildir ) veya başka bir akış oluşturarak çözülebileceğini unutmayın :

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

veya

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

Örnek olarak, bu kod:

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

Yazdırılacak:

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

0

Integer.toString (1100) size tamsayı bir dize olarak verir. Bağımsız basamaklardan oluşan bir bayt dizisi elde etmek için Integer.toString (1100) .getBytes () .

Düzenle:

Karakter basamaklarını sayısal basamaklara dönüştürebilirsiniz, böylece:

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

Bu biraz yanıltıcı. Bu, char '1'veya öğesini temsil eden bir bayt dizisi verecektir '0'. Bayt değerleri olmayacak 1veya 0.
jjnguy

Yanıltıcı? Bu biraz sert. Soru belirsizdi. Gerçekten rakamlarla ne yapmak istediğine bağlı. Hesaplamalar yapmak istediğini varsayıyorsunuz. Cevabım metin işlemeyi varsayar. Her iki varsayım da kısmen doğrudur, ama yanlış yönlendirmek niyetim değildi.
Don Branson

Sanırım yanıltıcı olduğunu düşünüyorum çünkü karakterleri değil sayıları düşündüğüm bir bayt dizisi elde edersiniz .
jjnguy

@ Justin - Ah, tamam. Baytları otomatik olarak karakter değil olarak ilişkilendirmem. Montaj günlerimde, alfabeyi yineleyerek 'b' elde etmek için 'a' değerini arttırırdım - bu yüzden bazen baytlar eşzamanlıydı. Tabii ki, üst düzey diller ve UTF bunu tartışıyor.
Don Branson

0

Bu, 0'dan büyük bir sayıdaki her bir rakamı bulmak için modulo 10 yöntemini kullanır, daha sonra bu, dizinin sırasını tersine çevirir. Bu, başlangıç ​​basamağı olarak "0" kullanmadığınızı varsayar.

Bu, kullanıcı girişini alacak şekilde değiştirilir. Bu dizi başlangıçta geriye doğru eklenir, bu yüzden Collections.reverse()kullanıcının siparişine geri koymak için çağrıyı kullanmak zorunda kaldı .

    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

Sadece konu üzerine inşa etmek için, sayının Java'da palindromik bir tam sayı olduğunu nasıl doğrulayacağınız aşağıda açıklanmıştır:

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

Eminim bu algoyu daha da basitleştirebilirim. Oysa ben buradayım. Ve tüm test vakalarım altında çalıştı.

Umarım bu birine yardımcı olur.


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 bir int olmak için büyük.
Giuseppe Garassino

@Beppe 12344444 int olmak için çok büyük değil. Java belgeleri aşağıdakileri talep eder: -2147483648 - 2147483647 (dahil) dahil olmak üzere .lang paketinizde desteklenen max_value değerini öğrenmek için
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
Lütfen yanıtınızı güncelleyin ve sorunun nasıl çözüldüğünü açıklayın. Yalnızca kod yanıtları genellikle düşük kaliteli yanıtlar olarak kabul edilir.
devlin carnate

0

teklifimle yorumların altında görü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

Bunun gibi bir şey 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

Bir çaylak olarak cevabım şöyle olurdu:

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

Şimdi tüm rakamlar "rakamlar" dizisinde yer alıyor.


0

Neden yapmıyorsun:

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

0

Bu soruda Java 8 kullanan bir yöntem göremediğim için bunu atarım. İle başladığınızı Stringve a almak istediğinizi varsayarsak, bu List<Integer>şekilde öğeleri aktarabilirsiniz.

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

Bu, karakterleri Stringa olarak alır, karakterlerin IntStreamtamsayı temsillerini sayısal bir değerle eşleştirir, bunları kutulara yerleştirir ve sonra bunları bir liste halinde toplar.


İlginç bir şekilde chars () bir IntStream döndürür, böylece boxed () öğesini çağırır ve () toplarsanız, Tamsayılar Listesini hemen döndürebilirsiniz.
Jason

1
ASCII değerlerini geri alırsınız. Yani 1, 49'a
eşleşir.

İlginç! Bunu bilmiyordum, ty.
Jason

Derlemez: Collectors.toList()→ " Tür uyuşmazlığı: Toplayıcıdan <Nesne dönüştürülemiyor, # 3- yakalanıyor?, < Object>> Listesini <R> Listesi'ne ", collect→ " Yöntem toplama (Tedarikçi <R>, ObjIntConsumer <R >, IntStream türündeki BiConsumer <R, R>) bağımsız değişkenler için geçerli değildir (Toplayıcı <Nesne,?, Liste <Object>>) "
Gerold Broser

Düzenlenen. Toplamadan önce kutulu olmaları gerekir. Bkz. Örneğin repl.it/@ifly6/HeftyAffectionateHertz#Main.java
ifly6

-1

Bu rakamları almanın en yararlı yolu olacağını düşünüyorum:

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

Sonra rakamları basit bir şekilde alabilirsiniz:

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

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

veya daha basit:

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

Son yöntemin getDigitsOf yöntemini çok fazla çağırdığına dikkat edin. Yani daha yavaş olacak. Bir int dizisi oluşturmalı ve sonra ikinci kod bloğunda olduğu gibi getDigitsOf yöntemini bir kez çağırmalısınız.

Aşağıdaki kodda, işlemi tersine çevirebilirsiniz. Bu kod, numarayı yapmak için tüm basamakları bir araya getirir:

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

Verdiğim her iki yöntem de negatif sayılar için çalışıyor.


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



-1

Java'da rakamları sayılardan ayırabilir ve bir Array'de depolayabilirsiniz.

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

Çıktı:

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

-1

eğer basamaklı bir olması gerekiyordu Character

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

Pattern.compile? Bu çok abartılı.
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;

         }
     }
    }

Diziler ve Dizeler kullanmadan. (rakam 1-99999)

çıktı :

Ayrı olarak yazdırmak için rakamı girin: - 12345

1 2 3 4 5


Daha verimli ve dinamik bir şekilde karar vermenin bir yolu olmalı divider.
ZX9
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.