2010-11-10 23 views
5

Có cách nào dễ dàng mà không cần phải sử dụng thư viện java để kết hợp hai int không? Có thể toán học?ghép hai int trong java

nói rằng tôi có 9 và 10, sau đó tôi muốn nó được 910 hoặc 224 và 225 sau đó tôi muốn nó được 224225.

+1

Bạn có muốn kết quả cũng là số nguyên không? –

+3

Tôi có thiếu gì đó không? làm thế nào về điều này: String result = 9 + "" + 10; hoặc int i = Integer.valueOf (9 + "" + 10); –

+0

có! kết quả cuối cùng như số nguyên xin vui lòng! – aherlambang

Trả lời

18

Bất cứ điều gì trong java.lang.* nên trò chơi công bằng ...

int a = Integer.parseInt(Integer.toString(9) + Integer.toString(10)); 

Phụ Lục:

Tôi không thích theo cú pháp vì quá tải nhà điều hành không tuyên bố ý định rõ ràng như ở trên. Chủ yếu là vì nếu chuỗi rỗng bị lấy nhầm, kết quả sẽ khác.

int a = Integer.parseInt(9 + "" + 10); 
+1

Tôi muốn biến nó thành 'int a = Integer.parseInt (9 +" "+ 10)'. Chính xác hơn nhiều. –

+1

@Adeel - Tôi không đồng ý. Đọc nhận xét của tôi về câu trả lời của pst. – Jeremy

+0

@ Jeremy: Điều đó không giữ ở đây. Bởi vì nếu bạn vô tình xóa 'empty_quotes', thì sáng hôm sau bạn sẽ nghĩ tại sao tôi nên phân tích' int' thành 'int'. Và điều đó sẽ cho bạn một gợi ý rằng bạn chưa bao giờ là ngu ngốc để làm điều đó ngay từ đầu. Vì vậy, phải có một cái gì đó còn thiếu. Oh yeah 'empty_quotes'. –

4

Bạn (khả năng) muốn nối chuỗi (bạn cũng có thể muốn một kết quả số nguyên , nếu đúng như vậy, hãy xem các câu trả lời khác). Nếu điều này đúng, về việc ghép nối, hãy tưởng tượng a và b là số nguyên:

"" + a + b 

Điều này làm việc vì toán tử + bị quá tải nếu toán hạng là một chuỗi. Sau đó nó chuyển đổi toán hạng khác thành một chuỗi (nếu cần) và dẫn đến một chuỗi nối mới. Bạn cũng có thể gọi Integer.toString(a) + Integer.toString(b) hoặc sử dụng String.format thích hợp nhưng những phương pháp này có thời lượng dài hơn.

+2

Tôi đã luôn luôn không thích ký hiệu này. Nếu chuỗi được lấy ra bằng cách nào đó, ý định nối 'a' và' b' không rõ ràng. – Jeremy

+1

'a +" "+ b' dễ đọc hơn một chút đối với người mới bắt đầu. – BalusC

+0

@Jeremy Tĩnh đánh máy là bạn của tôi :-) –

16

Điều này sẽ cung cấp cho bạn số nguyên như mong đợi nhưng chỉ hoạt động khi b > 0.

int a = 224; 
int b = 225; 
int c = (int) Math.pow(10, Math.floor(Math.log10(b))+1)*a + b; // 224225 

Chỉ cần một lời giải thích nhanh chóng: này xác định số chữ số trong b, sau đó tính một yếu tố nhân cho a như vậy mà nó sẽ di chuyển trong cơ sở 10 thêm một chữ số hơn b.

Trong ví dụ này, b có 3 chữ số, floor(log10(b)) trả về 2 (làm điều này bằng trực giác như 10^2=100, 10^3 = 1000, chúng tôi đang ở đâu đó ở khoảng giữa 225). Sau đó, chúng tôi tính toán hệ số nhân của 10^(2+1), đây là 1000. Khi chúng tôi nhân a trước 1000, chúng tôi nhận được 224000. Thêm 224000 vào 225 sẽ thu được 224225 mong muốn.

Điều này không thành công tại b == 0log10(0) không được xác định.

+0

Thú vị. +1 –

+0

Điều đó thật gọn gàng! +1 –

1

Đây là phiên bản của tôi mà hoạt động khi a, b> = 0.

Đó là lâu hơn một chút, nhưng là 10x nhanh hơn so với phương pháp đăng nhập và 5x nhanh hơn so với phụ thêm chuỗi.

int concat(int a, int b) 
{ 
    if (b == 0) 
     a *= 10; 
    else 
    { 
     int tempB = b; 
     while (tempB > 0) 
     { 
     tempB /= 10; 
     a *= 10; 
     } 
    } 
    return a + b; 
} 

Hãy sửa đổi điều này để làm việc cho số âm.

0

a + "" + b

kết quả do lỗi "loại không tương thích"

// The left operand to previousOperator. 
private int leftOperand; 

leftOperand = leftOperand + "" + số;

số được định nghĩa là int trong tờ khai phương pháp

này hoạt động java.lang

nhập khẩu. *

leftOperand = Integer.parseInt (Integer.toString (leftOperand) + Integer.toString (con số));

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