2012-06-06 14 views
5

Làm thế nào tôi có thể khởi tạo một mảng số nguyên trong Java như vậy: int[] array = {1,2,3}; bên trong một câu lệnh switch?Java: Cách khởi tạo mảng int trong trường hợp chuyển đổi?

Hiện nay, tôi có thể viết:

switch(something) { 
    case 0: int[] array = {1,2,3}; break; 
    default: int[] array = {3,2,1}; 
} 

Nhưng khi tôi cố gắng truy cập vào các biến array, nhật thực sẽ phàn nàn rằng nó có thể không được khởi tạo.

Nếu tôi cố gắng khai báo nó như int[] array; hoặc int[] array = new int[3]; và sau đó có tuyên bố chuyển đổi, nó sẽ nói rằng tôi đang cố gắng redeclare nó.

Tôi làm cách nào để giải quyết vấn đề này? Ý tưởng cuối cùng là có thể khởi tạo một mảng với 10 giá trị chỉ trong một dòng mã, dựa trên một số logic (một câu lệnh chuyển đổi).

+0

Cũng thấy: http://stackoverflow.com/questions/4104134/why-are-variables-not-local-in-case-statements –

Trả lời

14

Đặt tuyên bố trước câu lệnh chuyển. Bạn cũng sẽ cần phải nhanh chóng khởi tạo một mảng của loại chính xác.

int[] array; 
switch (something) { 
    case 0: array = new int[] {1, 2, 3}; break; 
    default: array = new int[] {3, 2, 1}; 
} 
+0

Cảm ơn bạn! Xin lỗi nếu nó có vẻ là một câu hỏi ngu ngốc :) –

1

Tôi sẽ yêu cầu bạn đặt khai báo mảng bên ngoài khối chuyển đổi, tuy nhiên, bạn không thể sử dụng cú pháp = { 1, 2, 3} sau khi khai báo. Bạn cần phải khởi tạo nó theo cách thông thường, như trong array = new int[] {1, 2, 3};

1
int[] array; 
switch (something) { 
    case 0: array = new int[]{1, 2, 3}; break; 
    default: array = new int[]{3, 2, 1}; 
} 
+0

Có, cảm ơn, nhưng Mark Byers là lần đầu tiên :) –

+0

Đánh bại ít hơn một phút! Ah tốt. Rất vui khi bạn tìm thấy một giải pháp! – GWilliams00

0

Tôi có cùng một câu hỏi trước. Hy vọng điều này sẽ giúp bạn.

Dấu đầu tiên là hoàn toàn đúng. Java hoạt động với phạm vi tối thiểu có thể. vì vậy, nếu bạn cố gắng thực hiện

case 1: int arr = whatever and case 2 : int arr = ... nó sẽ cho bạn lỗi khi khai báo lại vì toàn bộ chuyển đổi được coi là một phạm vi duy nhất và không có phạm vi/trường hợp dựa trên thông minh.

điểm 2: nếu bạn nói:

case 1: int arr = whatever and case 2 : arr = ... giả định rằng int arr sẽ được biên soạn và đưa từ trường hợp 1 thì bạn vẫn sai và một lần nữa Java sẽ cung cấp cho bạn các lỗi, dựa trên nguyên tắc rằng each and every local var has to be declared and initialized before its use.

vì vậy cách tốt nhất là khai báo nó bên ngoài công tắc của bạn và xác định hoặc khởi tạo nó trong bất kỳ trường hợp nào bạn thích.