2012-10-18 23 views
5

Tôi được chỉ định tạo một chương trình có 100 số nguyên ngẫu nhiên trong khoảng 0-25 và lưu chúng trong một mảng. Sau đó, tôi phải gọi 2 phương pháp để tách các phần mềm và tỷ lệ cược (rất điển hình). Vì vậy, tôi đã cố gắng điều ArrayList (Tôi Jút học nó) và nó có vẻ tốt (Tôi đã làm theo hướng dẫn và những thứ trên mạng) cho đến khi tôi chạy vào này: Unit8.java sử dụng không được kiểm soát hoặc không an toàn hoạt độngThao tác không an toàn hoặc không được kiểm tra cho ArrayList

Mã của tôi là này:

import java.util.*; 
    import java.awt.*; 

    public class Unit8 
    { 
public static void main (String [] args) 
{ 
    //create an array for original 100 integers 
    //create a 2D array for evens and odds 
    //split them up using 2 methods 

    int[] originalArray = new int[100]; 
    ArrayList even = new ArrayList(1); 
    ArrayList odd = new ArrayList(1); 

    for (int x = 0; x < originalArray.length; x++) 
    { 
     originalArray[x] = (int)(Math.random() * 25); 
    } 

    evensDivider(originalArray, even); 
    oddsDivider(originalArray, odd); 
} 

public static void evensDivider (int[] e, ArrayList even) 
{ 


    for (int y = 0; y < e.length; y++) 
    { 
     if (e[y]%2 == 0) 
      even.add(e[y]); 
    } 

    System.out.println("The evens are: " + even); 
} 

public static void oddsDivider (int[] o, ArrayList odd) 
{ 


    for (int z = 0; z < o.length; z++) 
    { 
     if (o[z]%2 == 1) 
      odd.add(o[z]); 
    } 
} 

}

với các lỗi xảy ra đặc biệt tại địa chỉ: even.add(e[y]);odd.add(o[z]);

Hãy giúp tôi với điều này, tôi đã cố gắng hết sức để làm cho nó rõ ràng và dễ hiểu.

+0

thích câu trả lời ở đây được cung cấp liên kết bên dưới. https://stackoverflow.com/a/44243684/6499408 –

Trả lời

10

Điều này là do bạn đang sử dụng ArrayList với raw type. Và bạn đang thêm một loại cụ thể vào nó.

Loại thô ArrayList sẽ mong đợi yếu tố của loại Đối tượng. Nếu bạn thêm bất kỳ loại nào khác, thì Trình biên dịch sẽ không biết chính xác loại bạn đang lưu trữ. Vì vậy, nó cung cấp cho bạn unchecked or unsafe operations để cảnh báo bạn rằng bạn có thể đang làm điều gì đó sai.

Bạn nên tạo tốt hơn một ArrayList Generic: -

List<Integer> evenNumbers = new ArrayList<Integer>(); 

Ngoài ra, thay đổi nó trong chữ ký method của bạn: -

public static void evensDivider (int[] e, List<Integer> evenNumbers) 

PS: - Bạn nên luôn luôn có một tham chiếu của interface type nếu bạn có.Ý tôi là sử dụng List ở vị trí của ArrayList

+0

Cảm ơn bạn, tôi; m vẫn còn tương đối mới đối với java và đặc biệt là ArrayLists và Lists Một lần nữa, cảm ơn bạn rất nhiều! – Timo

+1

@Timo .. Bạn được chào đón. Và đừng lo lắng. Bạn sẽ nhận được những điều dần dần khi bạn thực hành nhiều hơn .. –

3

Nó complaing về vấn đề này

ArrayList even = new ArrayList(1); 

bạn có phiên bản không-chung của ArrayList đó. Thay đổi nó thành

List<Integer> even = new ArrayList<Integer>(1); 

Đó là loại chung và an toàn.

Ngoài ra (dưới dạng ghi chú bên), giá trị 1 trong new ArrayList(1); chỉ định dung lượng ban đầu của danh sách. Tính năng đó là có cho các tình huống mà bạn biết bạn sẽ thêm một số lượng lớn các yếu tố vào danh sách, trong trường hợp đó bạn sẽ cung cấp một số lớn hơn, điều này sẽ giúp tránh được phí thay đổi kích thước. Việc chuyển một giá trị nhỏ (như 1) không có ý nghĩa.

+0

Cảm ơn bạn! Tôi chưa có phiếu bầu (không đủ danh tiếng), nhưng tôi đánh giá cao phản hồi của bạn! – Timo

+0

@Timo: Bạn được chào đón :) –

1

Thay vì điều này:

ArrayList even = new ArrayList(1); 

thử điều này:

List<Integer> evens = new ArrayList<Integer>(50); 

Dưới đây là những lợi thế:

  • List này chỉ có thể giữ số (Số nguyên, thực ra, còn được gọi là int), Tôi giả định là cảnh báo đến từ đâu.
  • tên này có tên số nhiều, phản ánh tốt hơn tên đó, danh sách
  • Nó tự khởi tạo với kích thước 50 (thay vì 1), tức là bạn nghĩ nó lớn tới mức nào.
1

Thay thế này ArrayList even = new ArrayList(1); với ArrayList<Integer> even = new ArrayList<Integer>(1);

Hoặc thêm @SuppressWarnings("rawtypes") trên đỉnh của thuộc tính/phương pháp/lớp.

+0

Tôi đã thử một cái gì đó như thế này nhưng nó sẽ không chạy, nhưng nó không sao bây giờ! Tôi đạt được rồi. Cảm ơn! – Timo

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