gpt4 book ai didi

Java 项目可能因循环错误而崩溃

转载 作者:行者123 更新时间:2023-11-30 07:41:02 25 4
gpt4 key购买 nike

这是我去年用 BlueJ 开始的项目之一,但遇到了问题,所以没有完成。现在我回过头来,确实需要帮助。

这是我的 GUI 类:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/**
*
* @author TANVEER AHMED
*/
public class HouseAdmin
{
private JFrame frame = new JFrame();
private JMenuBar menuBar = new JMenuBar();
private JMenu fileMenu = new JMenu("Menu");
private JMenuItem listAllAppliances;
private JMenuItem turnOnSingleAppliance;
private JMenuItem switchOnAllLights;
private BorderEventListener listener;//this class the inner class to handle the events
private JTextArea textArea;
private String printHouse;
private House myHome;


/**
* Constructor for objects of class HouseAdmin
*/
public HouseAdmin()
{

menuBar = new JMenuBar();

listAllAppliances = new JMenuItem("List All appliances...");
turnOnSingleAppliance = new JMenuItem("Turn on a single appliance...");
switchOnAllLights = new JMenuItem("Switch On All Lights...");

fileMenu.add(listAllAppliances);
fileMenu.add(turnOnSingleAppliance);
fileMenu.add(switchOnAllLights);

menuBar.add(fileMenu);


textArea = new JTextArea(30,70);
frame.add(textArea, BorderLayout.CENTER);

frame.setJMenuBar(menuBar);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible (true);
frame.pack();

listener = new BorderEventListener();
listAllAppliances.addActionListener(listener);
turnOnSingleAppliance.addActionListener(listener);
switchOnAllLights.addActionListener(listener);
setupHouse();



}



private void setupHouse(){
//Sets up a house
House myHome = new House("Hatfield");

Light bulb1 = new Light(1,"Bed Light",50,"H");
Light bulb2 = new Light(2,"Kitchen Light",5,"L");
Light bulb3 = new Light(3,"Garden Light",30,"E");
Light bulb4 = new Light(4,"Bathroom Light",50,"H");
Light bulb5 = new Light(5,"Shower Light",5,"L");
Light bulb6 = new Light(6,"Solar Light",30,"E");
Light bulb7 = new Light(7,"Passage Light",5,"L");
Light bulb8 = new Light(8,"Storage Light",50,"H");
Light bulb9 = new Light(9,"Garage Light",30,"H");
Light bulb10 = new Light(10,"Living room Light",30,"E");

myHome.addAppliance(bulb1);
myHome.addAppliance(bulb2);
myHome.addAppliance(bulb3);
myHome.addAppliance(bulb4);
myHome.addAppliance(bulb5);
myHome.addAppliance(bulb6);
myHome.addAppliance(bulb7);
myHome.addAppliance(bulb8);
myHome.addAppliance(bulb9);
myHome.addAppliance(bulb10);


printHouse = myHome.toString();

//textArea.setText(myHome.toString());


}


class BorderEventListener implements ActionListener{

public void actionPerformed (ActionEvent e){

if(e.getSource() == listAllAppliances){
textArea.setText(printHouse);

}

if (e.getSource () == turnOnSingleAppliance){
String code = JOptionPane.showInputDialog("Please Enter Application Code");
int code2 = Integer.parseInt(code);

myHome.turnOnASingleAppliance(code2);
textArea.append("Appliance " + code2 + " Has been turned on!");
textArea.setText(printHouse);

}

if (e.getSource () == switchOnAllLights){
myHome.turnAllLightsOn();

textArea.setText(printHouse);
textArea.append("All lights have been turned on!");

}

}
}

}

http://pastebin.com/dgLwaHSF

您可以看到我在第 105 行调用了一个名为“turnOnSingleAppliance”的方法。现在崩溃并向我抛出终端窗口。

这是该方法的代码:

import java.util.*;
/**
*
* @author TANVEER AHMED
*/
public class House {
private String address;
private int powerConsumption;
private ArrayList <ElectricalAppliance> HouseAppliances;
public House(String address) {
// initialise instance variables
this.address = address;
HouseAppliances = new ArrayList <ElectricalAppliance>();

}


public ElectricalAppliance turnOnASingleAppliance(int code){
for (int i = 0; i < HouseAppliances.size(); i++){
ElectricalAppliance app = HouseAppliances.get(i);
if (app.getCode() == code ){
app.lightSwitchOn();
}
}
return null;
}
}

http://pastebin.com/8krvvVHW

也许你们需要查看更多来源?如果是的话我可以上传整个bluej项目。

我的直觉告诉我循环是错误的。大家觉得怎么样?

最佳答案

更改此行

House myHome = new House("Hatfield");

至此

myHome = new House("Hatfield");

您没有在第一个实例中定义该字段,因此您的错误可能出现在事件监听器内的这一行。

myHome.turnOnASingleAppliance(code2);

您所做的是一个简单的错误,称为“变量遮蔽”,这意味着您正在定义与字段同名的局部变量。

关于Java 项目可能因循环错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com