2012-06-13 14 views

Trả lời

11

Sử dụng dấu ngoặc như sau

System.out.println((i+1) + " " + (j+1)); 

Từ docs

Toán tử + là cú pháp trái kết hợp, bất kể cho dù đó sau được xác định bằng cách phân tích loại đại diện cho chuỗi nối hoặc thêm vào. Trong một số trường hợp, việc chăm sóc được yêu cầu để có được kết quả mong muốn. Ví dụ, khái niệm:

a + b + c luôn coi là ý nghĩa: (a + b) + c

Mở rộng này để kịch bản của bạn

i+1 + " " + j+1 

nó trở nên

(((i + 1) + " ") + j)+1 

i là số int (i + 1) = 1, đơn giản Ngoài

" " là một String do đó ((i + 1) + " ") = 1VỚI SPACE (String nối)

Tương tự như vậy khi j và cuối cùng 1 được thêm vào, nó được thêm vào một String do đó Stringnối mất nơi, mà biện minh cho đầu ra mà bạn đang nhận được.

Xem

+0

Cảm ơn rất nhiều .. Không biết rằng .. – sachinjain024

+3

Ông đang yêu cầu sự khác biệt –

+0

Bạn được hoan nghênh, cũng thấy liên kết tôi đã thêm trong câu trả lời –

2
int i = 0; 
    int k = Integer.parseInt("12"); 
    int j = k; 
    System.out.println(i+1 + " " + (j+1)); 

cơ bản khi bạn đặt + "" + sau java này chỉ gắn thêm giá trị như chuỗi.

và khi bạn đặt (j + 1) trong dấu ngoặc thì ưu tiên của nó cao hơn và nó được thực hiện trước và thực hiện thao tác tổng.

6

đó là beacuse của " ".

bất cứ khi nào một Chuỗi đến, java không thực hiện bất kỳ phép tính nào sau đó và chỉ nối thêm nó dưới dạng chuỗi.

Vì vậy, trong trường hợp của bạn, i+1 được tính là 1, nhưng " " + j+1 có chuỗi trong đó.Vì vậy, nó chỉ nối với nhau để tạo thành 121

+0

Nhưng tại sao nó không phụ thuộc vào trường hợp đầu tiên? Nếu nó đúng, nó phải giống như 01 121 – AurA

+0

bất kỳ primitives/wrappers nào trước khi sự xuất hiện của String đầu tiên được tính toán, Bất cứ điều gì sau đó, chỉ được nối với nhau. – Kshitij

+1

@AURA: vì nó về cơ bản dịch sang một cái gì đó tương đương với: '" ".concat (j) .concat (1)' (hoặc một phiên bản tương tự bằng cách sử dụng StringBuilders, tùy thuộc vào mã của bạn và phiên bản JVM). Nó không thể đoán những gì bạn muốn, vì vậy nó khá tự nhiên trái để giải thích đúng. – haylem

3

Lý do bạn thấy hành vi này là chuỗi các toán tử + được đánh giá từ trái sang phải. Vì vậy, nó được đánh giá là nếu ngoặc:

System.out.println((((i + 1) + " ") + j) + 1); 

Các nhà điều hành đầu tiên thêm hai int giá trị và tạo ra một giá trị int. + tiếp theo sẽ thêm int vào String và tạo ra String. Sau đó, mọi thứ đều nối chuỗi. Bạn có thể giới thiệu dấu ngoặc đơn của riêng bạn để có được kết quả mong muốn.

+0

+1 để được giải thích chi tiết. Câu trả lời hay nhất. –

+0

Yeah +1, đây thực sự là câu trả lời hay nhất – mprabhat

2

Khi bạn sử dụng " " Biểu thức sau đó được đánh giá là chuỗi.

Sử dụng dấu ngoặc vuông () xung quanh biểu thức có thể giải quyết được sự cố trong tay.

System.out.println(i+1 + " " + (j+1)); 
1

+ điều hành quá tải cho cộng và String nối những gì bạn đang làm là String nối và không bổ sung .. Sử dụng dấu ngoặc đơn để thực hiện bổ sung.

1

phân tích về cơ bản sẽ trả về int (Xem API Java) và chỉ có một kiểu int trong Java. trong ví dụ này bạn đã sử dụng "", trong đó java sẽ coi nó là chuỗi. trong bất kỳ hoạt động nào đảm bảo bạn không kết hợp các chuỗi với các phép tính. Luôn sử dụng dấu ngoặc đơn để tách chuỗi khỏi tính toán.

1

Nó xảy ra bởi vì các nhà điều hành + đã để lại associativity và có một chức năng quá tải với chuỗi, vì vậy khi bạn có điều này

int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1

nó khoản tiền đầu tiên i + 1 mang đến cho 1 sau đó nó tóm 1 + " ", trong đó sử dụng chức năng quá tải của nó để nối 1 và "" sao cho nó cho một chuỗi có giá trị là "1". Sau đó nó tổng hợp "1 " + j và vì một trong các toán hạng là một chuỗi, nó thực hiện hành vi tương tự và vân vân.

0

Interger.parseInt (Chuỗi str) là một phương thức lớp bao bọc được sử dụng để chuyển đổi loại chuỗi obj thành kiểu dữ liệu nguyên thủy (int). điều này thường được sử dụng trong bộ sưu tập khung làm việc để chuyển đổi kiểu dữ liệu nguyên thủy sang đối tượng và ngược lại