Saya memiliki angka seperti 1100, 1002, 1022 dll. Saya ingin memiliki masing-masing digit, misalnya untuk angka pertama 1100 Saya ingin memiliki 1, 1, 0, 0.
Bagaimana saya bisa mendapatkannya di Jawa?
Untuk melakukan ini, Anda akan menggunakan %
operator (mod).
int number; // = some int
while (number > 0) {
print( number % 10);
number = number / 10;
}
Operator mod akan memberi Anda sisa melakukan pembagian int pada nomor.
Begitu,
10012 % 10 = 2
Karena:
10012 / 10 = 1001, remainder 2
Catatan: Seperti yang dicatat Paul, ini akan memberi Anda angka dalam urutan terbalik. Anda harus mendorongnya ke tumpukan dan melepaskannya dengan urutan terbalik.
Kode untuk mencetak angka dalam urutan yang benar:
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());
}
Konversikan ke
String
dan gunakanString#toCharArray()
atauString#split()
.Jika Anda sudah menggunakan Java 8 dan Anda ingin melakukan beberapa operasi agregat setelahnya, pertimbangkan
String#chars()
untuk menggunakannyaIntStream
.sumber
split("")
, item pertama dalam array adalah""
. Gunakan regex lain, sepertisplit("(?<=.)")
.number.chars()
akan mengembalikan hasilnya dalam nilai Ascii bukan numerik. Sehingga angka "1234" akan dibagi menjadi "49", "50", "51", "52" alih-alih "1", "2", "3", "4". Untuk melakukannya dengan benar seharusnya terlihat seperti:IntStream chars = number.chars().map(Character::getNumericValue);
Bagaimana dengan ini?
atau alih-alih mencetak ke konsol, kami dapat mengumpulkannya dalam array bilangan bulat dan kemudian mencetak array:
Jika Anda ingin mempertahankan urutan digit dari paling tidak signifikan (indeks [0]) hingga paling signifikan (indeks [n]), getDigits yang diperbarui berikut ini adalah yang Anda butuhkan:
sumber
+1
+1
if (number < 0) { return new Integer[0]; }
Diuji dengan input berikut:Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
Saya belum pernah melihat orang menggunakan metode ini, tetapi itu berhasil untuk saya dan pendek dan manis:
Ini akan menampilkan:
sumber
0142323
adalah konstanta oktal sama dengan50387
, karena nol di depan, sama seperti0x100
konstanta heksadesimal sama dengan256
, karena di depan0x
, dan0b1011
konstanta biner sama dengan11
karena di depan0b
. Berhati-hatilah memimpin 0 pada konstanta integer!Saya perhatikan bahwa ada beberapa contoh penggunaan Java 8 stream untuk menyelesaikan masalah Anda, tetapi saya pikir ini adalah yang paling sederhana:
Untuk menjadi jelas: Anda menggunakan
String.valueOf(number)
untuk mengkonversi int ke String, laluchars()
metode untuk mendapatkan IntStream (setiap karakter dari string Anda sekarang menjadi nomor Ascii), maka Anda perlu menjalankanmap()
metode untuk mendapatkan nilai numerik dari nomor Ascii. Pada akhirnya Anda menggunakantoArray()
metode untuk mengubah aliran Anda ke array [].sumber
Saya melihat semua jawabannya jelek dan tidak terlalu bersih.
Saya sarankan Anda menggunakan sedikit rekursi untuk menyelesaikan masalah Anda. Posting ini sudah sangat lama, tetapi mungkin bermanfaat untuk pembuat kode masa depan.
Keluaran:
sumber
sumber
Cara yang lebih mudah menurut saya adalah untuk mengubah angka menjadi string dan gunakan
substring
untuk mengekstrak dan kemudian mengkonversi ke integer.Sesuatu seperti ini:
ouput adalah 2014
sumber
Saya menulis sebuah program yang menunjukkan bagaimana memisahkan angka-angka dari bilangan bulat menggunakan pendekatan yang lebih sederhana dan mudah dipahami yang tidak melibatkan array, rekursi, dan semua schmancy mewah. Ini kode saya:
Misalkan input Anda adalah bilangan bulat
123
, output yang dihasilkan adalah sebagai berikut:sumber
Inilah jawaban saya, saya melakukannya untuk diri saya sendiri dan saya harap itu cukup sederhana bagi mereka yang tidak ingin menggunakan pendekatan String atau membutuhkan solusi matematika-y yang lebih:
Jadi saya hanya mendapatkan unit, mencetaknya, mengurangi dari jumlahnya, lalu membaginya dengan 10 - yang selalu tanpa benda mengambang, karena unit hilang, ulangi.
sumber
solusi sederhana
sumber
Coba ini:
Anda akan mendapatkan yang pertama = 1, kedua = 2, ketiga = 3 dan keempat = 4 ....
sumber
%
. Itu menambah sedikit nilai.Solusi Java 8 untuk mendapatkan digit sebagai int [] dari integer yang Anda miliki sebagai String:
sumber
i -> i - '0'
pemetaan sehingga hasilnya persis seperti yang diminta OP.i - '0'
ada juga metode sepertiCharacter.toDigit
itu IMO lebih baik digunakan."0123456789".chars().map(i -> Character.digit(i, 10)).toArray()
Karakter # digit (ada satu untuk char dan satu untuk int codePoints)tidak
chars()
jugacodePoints()
- lambda lainnyaString number = Integer.toString( 1100 );
sumber
Java 9 memperkenalkan
Stream.iterate
metode baru yang dapat digunakan untuk menghasilkan aliran dan berhenti pada kondisi tertentu. Ini dapat digunakan untuk mendapatkan semua angka dalam angka, menggunakan pendekatan modulo.Perhatikan bahwa ini akan mendapatkan digit dalam urutan terbalik, tetapi itu dapat dipecahkan dengan mengulang melalui array ke belakang (sayangnya membalikkan array tidak sesederhana itu ), atau dengan membuat aliran lain:
atau
Sebagai contoh, kode ini:
Akan dicetak:
sumber
Integer.toString (1100) memberi Anda integer sebagai string. Integer.toString (1100) .getBytes () untuk mendapatkan array byte dari masing-masing digit.
Edit:
Anda dapat mengubah angka karakter menjadi angka angka, dengan demikian:
sumber
'1'
atau'0'
. Nilai byte tidak akan menjadi1
, atau0
.Ini menggunakan metode modulo 10 untuk mencari tahu setiap digit dalam angka lebih besar dari 0, maka ini akan membalik urutan array. Ini dengan asumsi Anda tidak menggunakan "0" sebagai angka awal.
Ini dimodifikasi untuk menerima input pengguna. Array ini awalnya disisipkan ke belakang, jadi saya harus menggunakan
Collections.reverse()
panggilan untuk memasukkannya kembali ke pesanan pengguna.sumber
Hanya untuk membangun pada subjek, berikut ini cara mengonfirmasi bahwa angka tersebut adalah bilangan bulat palindrom di Jawa:
Saya yakin saya bisa menyederhanakan algo ini lebih jauh. Namun, di sinilah saya berada. Dan itu berhasil di bawah semua kasus pengujian saya.
Saya harap ini membantu seseorang.
sumber
sumber
sumber
lihat di bawah proposal saya dengan komentar
sumber
Sesuatu seperti ini akan mengembalikan
char[]
:sumber
Sebagai noob, jawaban saya adalah:
Sekarang semua digit terkandung dalam array "digit".
sumber
Kenapa tidak Anda lakukan:
sumber
Karena saya tidak melihat metode pada pertanyaan ini yang menggunakan Java 8, saya akan memasukkan ini. Dengan asumsi bahwa Anda mulai dengan
String
dan ingin mendapatkanList<Integer>
, maka Anda dapat melakukan streaming elemen seperti itu.Ini mendapatkan karakter di
String
sebagaiIntStream
, memetakan representasi bilangan bulat karakter ke nilai numerik, kotak mereka, dan kemudian mengumpulkan mereka ke dalam daftar.sumber
Collectors.toList()
→ " Ketidakcocokan tipe: tidak dapat mengkonversi dari Kolektor <Objek, menangkap # 3-dari?, Daftar <Object>> ke Pemasok <R> ",collect
→ " Metode mengumpulkan (Pemasok <R>, ObjIntConsumer <R >, BiConsumer <R, R>) dalam tipe IntStream tidak berlaku untuk argumen (Kolektor <Objek,?, Daftar <Object>>) "Saya pikir ini akan menjadi cara yang paling berguna untuk mendapatkan angka:
Maka Anda bisa mendapatkan angka dengan cara sederhana:
atau lebih sederhana:
Perhatikan metode terakhir memanggil metode getDigitsOf terlalu banyak waktu. Jadi akan lebih lambat. Anda harus membuat array int dan kemudian memanggil metode getDigitsOf sekali, seperti di blok kode kedua.
Dalam kode berikut, Anda dapat membalikkan proses. Kode ini menyatukan semua digit untuk membuat nomor:
Kedua metode yang saya sediakan juga berfungsi untuk angka negatif.
sumber
sumber
di Jawa, ini adalah bagaimana Anda dapat memisahkan angka dari angka dan menyimpannya dalam Array.
Keluaran:
sumber
Jika digit dimaksudkan untuk a
Character
sumber
Pattern.compile
? Itu terlalu banyak pembunuhan.Tanpa menggunakan array dan String. (digit 1-99999)
keluaran:
Masukkan digit untuk dicetak secara terpisah: - 12345
1 2 3 4 5
sumber
divider
.