2012-03-09 14 views
5

tôi nhận được một lỗi khi cố gắng để tạo ra các danh sách liên kết mà nói:"LinkedList là không chung chung" lỗi Java

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The type LinkedList is not generic; it cannot be parameterized with arguments <String>
at LinkedList.main(LinkedList.java:7)

Bất cứ ai cũng biết làm thế nào để sửa lỗi này? Đây là chương trình:

import java.util.*; 

public class LinkedList { 
    public static void main(String[] args) { 
     List<String> list = new LinkedList<String>(); 
     Scanner input = new Scanner(System.in); 

     System.out.print("How many elements do you want to add: "); 
     int num = input.nextInt(); 

     for(int i = 0; i < num; i++) { 
      System.out.print("Add Element: "); 
      String element = input.next(); 
      list.add(element); 
     } 
     System.out.println(); 

     System.out.println("LinkedList elements are: "); 
     for(int i = 0; i < list.size(); i++) { 
      System.out.println(list.get(i)); 
     } 
    } 
} 
+2

Bạn đang cố gắng làm gì? Lớp LinkedList mà bạn đang tạo là một thư viện lớp Java được xây dựng trong Bộ sưu tập. Thay đổi tên lớp của bạn. –

Trả lời

15

Thay đổi

new LinkedList<String>() 

để

new java.util.LinkedList<String>() 

Các nguồn gốc của vấn đề là LinkedList đề cập đến lớp chứa mã class LinkedList , không phải java.util.LinkedList.

Tên lớp không đủ tiêu chuẩn như LinkedList (trái ngược với "tên đủ điều kiện" như java.util.LinkedList) được giải quyết bằng cách tìm kiếm kết quả phù hợp theo thứ tự nhất định. Roughly

  1. Tìm một lớp có chứa.
  2. Tìm kiếm nhập không phải ký tự đại diện.
  3. Tìm một lớp học trong cùng một gói.
  4. Tìm kiếm nhập ký tự đại diện.

Mục "6.5 Determining the Meaning of a Name" đặc tả ngôn ngữ Java giải thích chi tiết hơn.

+0

Có hoạt động. Cảm ơn! – Brett

+1

Tôi đặt cược rất nhiều rằng bạn đang sử dụng Eclipse .... Eclipse thích tham khảo các thư viện lạ nhất. – rewolf

2

Bạn đặt phương pháp main của bạn trong một lớp được gọi là LinkedList, trong đó có ưu tiên hơn được xây dựng trong LinkedList lớp trong thuật toán có độ phân giải tên của trình biên dịch. Nói cách khác, bởi vì phương pháp main của bạn nằm trong một lớp có tên là LinkedList, trình biên dịch có tên LinkedList có nghĩa là của bạnLinkedList lớp thay vì java.util.LinkedList. Có hai bản vá dễ dàng:

  1. Đổi tên lớp học của bạn
  2. Thay vì viết

    Danh sách list = LinkedList mới();

    viết

    Danh sách danh sách = new java.util.LinkedList();

Tôi đánh giá cao tùy chọn đầu tiên. Vì lớp LinkedList của bạn không thực sự đại diện cho cấu trúc dữ liệu danh sách được liên kết, tên trên lớp của bạn gây nhầm lẫn với ai đó đang đọc mã. Có lẽ gọi lớp học của bạn LinkedListTest thay vì tức là tập tin của bạn có thể

import java.util.*; 

public class LinkedListTest { 
    // Implementation of main and helper methods 
} 
1
public class LinkedList { 

Bạn đặt tên lớp của riêng bạn LinkedList, vì vậy nó lấy được ưu tiên hơn các java.util.LinkedList.

Hoặc thay đổi tên của lớp thành một thứ khác hoặc làm new java.util.LinkedList<String>() để làm rõ tên bạn muốn.

3
public class LinkedList { 

Lớp học của bạn không được định nghĩa là chung chung. Tôi nghĩ rằng mặc dù bạn đang cố gắng sử dụng LinkedList của Java, vì vậy bạn nên đổi tên lớp của bạn.

3

Lớp học của bạn còn được gọi là LinkedList để nó xung đột. Thay vào đó, nếu bạn muốn khắc phục, hãy sử dụng dòng này. Vẫn còn tốt hơn, chỉ có một tên khác cho lớp học của bạn ...

List<String> list = new java.util.LinkedList<String>();