cuốn sách gpt4 ai đã làm

Lỗi: Không thể áp dụng Phòng xây dựng trong Phòng lớp cho các loại nhất định

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 07:14:48 27 4
mua khóa gpt4 Nike

Tôi hoàn toàn mới với java. Tôi đã dành hàng giờ để tìm giải pháp cho vấn đề này, nhưng mọi câu trả lời đều liên quan đến việc truyền tham số hoặc sử dụng khoảng trống, điều mà tôi sẽ không làm trong trường hợp này.

Tôi có hai tệp java, một tệp dành cho lớp Phòng và một tệp dành cho lớp TourHouse. Tôi đang cố gắng tạo một phòng mới trong lớp TourHouse. Đây là sai lầm của tôi, nó khiến tôi phát điên và tôi đã thử mọi cách có thể. Cảm ơn bạn trước.

HouseTour.java:15: error: constructor Phòng trong lớp Không thể áp dụng phòng đã cho
các loại;
{
^
bắt buộc: Chuỗi, Chuỗi
tìm thấy: không có đối số
lý do: các lập luận thực tế và chính thức có độ dài khác nhau

Đây là hạng Phòng, tính ra thì sẽ có tổng cộng 7 phòng

// Phòng.java

nhập java.util.*;

Phòng học công cộng
{
// Xác định các biến thể hiện
tên chuỗi riêng tư;
mô tả chuỗi riêng tư;

// Định nghĩa hàm tạo
phòng công cộng(Chuỗi theName, String theDescription)
{
tên = tên;
mô tả = mô tả;
}

Chuỗi công khai toString()
{
return " " + tên + "\n" + mô tả + "\n";
}
}

Đây là lớp HouseTour

nhập java.util.*;

lớp công khai HouseTour mở rộng phòng
{
// Xác định biến
Phòng công cộng[ ] phòng = Phòng mới[7];

//Định nghĩa hàm tạo
HouseTour công cộng( )
{
Rooms[0] = Phòng mới("Phòng khách", "Mayonnaise và Brill Grates, Michaelsoft");

Rooms[1] = Phòng mới("Tầng hầm", "Hy vọng không có xác chết nào ở đây...");
}

// điều này thật kinh khủng và không đúng
phòng Chuỗi công cộng( )
{
cho (int i = 0; i <=7; i++)
{
Đầu ra chuỗi = "Phòng trong nhà có trong chuyến tham quan\n";
Chuỗi đầu ra2 = đầu ra + Rooms.toString() + "\n";
trả về đầu ra2;
}
}
}

EDIT: Đã giải quyết nhưng vẫn cần trợ giúp vì tôi đã làm xong n00b, :(

    // điều này thật kinh khủng và không đúng 
phòng Chuỗi công cộng( )
{
Output = "Phòng trong nhà có trong chuyến tham quan\n";
cho (int i = 0; i <=7; i++)
{
đầu ra += Rooms[i]; // Tôi không thể làm điều này nhưng tôi phải làm thế nào?
}
return outout.toString(); // tôi có làm điều này không?
}
}

Những gì tôi đang làm là cố gắng học java bằng cách chuyển đổi một dự án Ruby mà tôi đã tạo. Vì vậy, trong Ruby ​​bạn có thể nói:

phòng chắc chắn
đầu ra = "Các phòng trong nhà được bao gồm trong chuyến tham quan\n"
@rooms.mỗi người làm |r|
đầu ra += r.to_s + "\n"
end
đầu ra trở lại
end

EDIT: Vẫn đang cố gắng, có ý kiến ​​gì không?Đã thêm public String ; và đầu ra public String vào các khai báo;

    // điều này thật kinh khủng và không đúng 
phòng Chuỗi công cộng( )
{
s = ""
Output = "Phòng trong nhà có trong chuyến tham quan\n";
cho (int i = 0; i <=7; i++)
{
s += phòng[i];
}
s.toString() // Tôi không biết
trả về đầu ra + s; // tôi có làm điều này không?
}
}

EDIT: Giải quyết bằng thủy phi cơ chứa đầy lươn

câu trả lời hay nhất

À, tôi hiểu vấn đề của bạn: HouseTour mở rộng Room. Đừng làm điều này! HouseTour không phải là trường hợp cụ thể hơn của loại Phòng, vì vậy lớp này không nên được mở rộng. Nó không thỏa mãn quy tắc "is-a", tương tự như việc cố gắng định nghĩa Bus là một lớp con của SchoolKid. Giống như Bus không phải là một loại SchoolKid mà chứa SchoolKids, HouseTour không phải là một căn phòng mà chứa các phòng. nó thỏa mãncó-amối quan hệ hơn làlà-amối quan hệ.

Nếu tính kế thừa là chính xác trong trường hợp này, hàm tạo HouseTour của bạn sẽ cần gọi hàm siêu hàm tạo Room và truyền vào hai tham số chuỗi:

// Đừng làm thế!!!
lớp công khai HouseTour mở rộng Phòng {

công khai HouseTour() {
super("foo", "bar");
....
}

Nhưng phải nói rằng, việc kế thừa cũng không thích hợp ở đây - hãy loại bỏmở rộng phòng, bạn sẽ được tự do.

例如,

lớp công khai HouseTour { // không mở rộng!
phòng riêng[] phòng // có-a không là-a;

công khai HouseTour() {
// đừng gọi super ở đây
}

Ngoài ra, theo nhận xét của tôi, điều này sẽ mang lại cho bạn kết quả xấu:phòng.toString()

Thay vào đó, nó lặp lại mảng và nhận kết quả toString() từ mỗi mục Room trong mảng.

biên tập
Gợi ý cho phương thức Rooms():

  • trước vòng lặpTạo một Chuỗi hoặc StringBuilder.
  • bên trong vòng lặpXây dựng một Chuỗi hoặc StringBuilder.
  • hiện hữuTrả về Chuỗi hoặc StringBuilder#toString sau khi lặp.
  • Bên trong vòng lặp, lấy toString() từ mục Phòng hiện tại trong danh sách.
  • Trước khi gọi phương thức trên mục Rooms[i], bạn cần kiểm tra xem nó có rỗng không.

编辑2

Bạn khai báo:

phòng Chuỗi công cộng( ) 
{
Output = "Phòng trong nhà có trong chuyến tham quan\n";
cho (int i = 0; i <=7; i++)
{
đầu ra += Rooms[i]; // Tôi không thể làm điều này nhưng tôi phải làm thế nào?
}
return outout.toString(); // tôi có làm điều này không?
}

gây ra sự cố nhưng bạn không chỉ rõ vấn đề.

Bản thân tôi, tôi sẽ làm một cái gì đó như thế này:

phòng Chuỗi công cộng( ) {
// khai báo Chuỗi của bạn cục bộ, không phải toàn cục trong lớp
Đầu ra chuỗi = "Phòng trong nhà có trong chuyến tham quan\n";
// một lần nữa, tránh sử dụng những con số "ma thuật" như 7
for (int i = 0; i < Rooms.length; i++) {
đầu ra += Rooms[i].toString(); // **** bạn phải trích xuất Chuỗi của Room
}
trả về kết quả; // không cần gọi toString() trên Chuỗi
}

Về java - Lỗi: Không thể áp dụng Phòng xây dựng trong Phòng lớp cho các loại nhất định, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/20111171/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress