2013-03-25 38 views
5

Tôi có một dòng giống nhưJava số chữ tối đa trong nhật thực

if(numb2 < 10000000000000 & numb2 > 100000000000){ 

Vì vậy, trong Eclipse nó nói 10000000000000 và 100.000.000.000 đều ra khỏi phạm vi đen nguyên. Cụ thể

hiểu theo nghĩa đen 10000000000000 kiểu int là ra khỏi phạm vi và hiểu theo nghĩa đen 1000000000000 kiểu int là ra khỏi phạm vi

Tôi đã thay đổi dòng để nó trông giống như

if(numb2 < 1000000000*10000 & numb2 > 100000000*1000){ 

nhưng nếu bạn đã nhập một số trong phạm vi đó, nó chỉ cho biết

Exception in thread "main" java.lang.NumberFormatException: For input string: "5555555555555" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at java.lang.Integer.parseInt(Unknown Source) 
    at twothousandthirteen.LuckyNumber.main(LuckyNumber.java:12) 

Tôi muốn biết nếu có cách nào để mở rộng kết thúc phạm vi số chữ hoặc làm bất cứ điều gì để khắc phục sự cố.

Cảm ơn KMehta

+0

Bạn có thể sử dụng 'long' hoặc' BigInteger' tùy theo nhu cầu của bạn. –

+1

Có một cái nhìn tại 'Integer.MAX_VALUE' và' Long.MAX_VALUE' – jlordo

+0

Bằng cách này, toán tử & không phải là một logic AND - đó là một bitwise AND, có lẽ không phải là những gì bạn muốn. –

Trả lời

0

Bạn phải chỉ định một chữ long:

if(numb2 < 10000000000000L && numb2 > 100000000000L){ 

... và Long.parseLong để phân tích số nguyên bên ngoài int phạm vi, mà là giữa -2147483648 và 2,147,483,647.

Long.parseLong(input) 

Tất nhiên, cả hai literals được dự định là cao hơn nhiều so với phạm vi int, vì vậy nếu numb2 là một int, sau đó không có điểm trong kiểm tra phạm vi đó.

Ngoài ra, đối với boolean và, không sử dụng &, hãy sử dụng &&. & là bitwise-và nhà điều hành và chắc chắn không phải những gì bạn đang cố gắng làm; && là hợp lý "và".

+0

Cảm ơn bạn vì điều &&! Tôi không nhận ra điều đó! – KMehta

0

Kiểu dữ liệu của numb2 là gì? Có phải là int không? Nếu vậy, bạn không cần phải kiểm tra - int không có khả năng lưu trữ số lượng nhiều hơn ~ 2.000.000.000. Điều kiện luôn đúng.

Nếu đó là long, mặt khác, tất cả những gì bạn cần là long chữ. Điều đó sẽ như sau:

if(numb2 < 10000000000000L & numb2 > 100000000000L){ 
+0

Đó là int và cảm ơn! – KMehta

+2

Ở đây tại SO, chúng tôi nói cảm ơn bằng cách upvoting và/hoặc chấp nhận câu trả lời. –

0

Nếu bạn muốn sử dụng số trong phạm vi của int, bạn sẽ phải sử dụng một loại khác. Giá trị nguyên trong nhật thực chỉ đi tới 2^31-1 (đã ký). Nếu bạn muốn sử dụng giá trị lớn hơn, thời lượng có thể lên đến 2^63-1.

Nếu bạn cần số lớn hơn số đó, đôi có thể rất lớn nhưng với độ chính xác rất kém, do đó không nên sử dụng nếu bạn cần độ chính xác. Một cách khác cho các giá trị lớn là sử dụng lớp BigInteger, nhưng điều đó sẽ tạo ra các đối tượng có thể khó giải quyết.

+0

Cảm ơn !!!!!!!!! – KMehta

4

Các số đó lớn hơn giá trị int lớn nhất, là 2 -1 hoặc 2147483647 và có sẵn dưới dạng hằng số Integer.MAX_VALUE.

Lý do bạn có thể mã hóa nó như 1000000000*10000 là bởi vì mặc dù mỗi nhơn nằm trong phạm vi của giá trị tối đa int, kết quả không phải là và java xử lý này bằng cách overflowing kết quả hiện giờ nó nằm trong phạm vi hợp lệ.

Để khắc phục vấn đề này, làm cho các biến của bạn long (64 bit) và hằng số của bạn dài cũng bằng cách thêm L ở cuối nếu số (mặc định kiểu số trong java là int), và bạn nên sử dụng Long.parseLong() để phục vụ cho các giá trị lớn hơn trong đầu vào của bạn.

Lưu ý rằng, giống như int, phạm vi của long được giới hạn quá: 2 -1 hoặc 9223372036854775807, đó là có sẵn như là hằng số Long.MAX_VALUE.

Đối với số lượng lớn tùy ý, hãy sử dụng lớp BigInteger.

+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn! – KMehta

Các vấn đề liên quan