Java新手汽车应用程序
我是一名学生,是的,这是我的家庭作业。我花了上周的时间复习笔记,阅读这本书,并在网上研究相关话题,但我不知道问题出在哪里。你能告诉我我做错了什么吗?任何帮助都将不胜感激。我只使用记事本和命令提示符 我得到的指导原则是:创建一个由两个类组成的Java应用程序。第一班将是你的申请班。二班是一个叫汽车的班。您的应用程序将创建一个名为nova的Car实例,并驱动它 汽车规则: 如果未启动车辆,则无法驾驶车辆。请向控制台发送错误消息。 如果车辆未启动,则无法停车。请向控制台发送错误消息。 如果汽车已经启动,则无法启动。请向控制台发送错误消息。 一旦你告诉汽车驾驶,你唯一能做的就是停止,并向控制台发送信息 一旦您呼叫停止,汽车将返回初始状态,用户必须在尝试执行任何其他功能之前启动汽车。向控制台发送消息 showState方法的目的是提供一种检查汽车状态的方法。它应该构建一条消息,然后将其发送到控制台 我的代码:Java新手汽车应用程序,java,Java,我是一名学生,是的,这是我的家庭作业。我花了上周的时间复习笔记,阅读这本书,并在网上研究相关话题,但我不知道问题出在哪里。你能告诉我我做错了什么吗?任何帮助都将不胜感激。我只使用记事本和命令提示符 我得到的指导原则是:创建一个由两个类组成的Java应用程序。第一班将是你的申请班。二班是一个叫汽车的班。您的应用程序将创建一个名为nova的Car实例,并驱动它 汽车规则: 如果未启动车辆,则无法驾驶车辆。请向控制台发送错误消息。 如果车辆未启动,则无法停车。请向控制台发送错误消息。 如果汽车已经启动
public class MyAppAssignment3
{
public static void main (String[] args)
{
System.out.println("Scenario 1");
Car nova1 = new Car();
nova1.start();
nova1.showState();
nova1.drive();
nova1.stop();
nova1.showState();
System.out.println("");
System.out.println("Scenario 2");
Car nova2 = new Car();
nova2.showState();
nova2.drive(); //needs to send error message - can't drive a car that's not started
nova2.stop();
nova2.showState();
System.out.println("");
System.out.println("Scenario 3");
Car nova3 = new Car();
nova3.showState();
nova3.start();
nova3.showState();
nova3.stop(); //needs to send error message - can't stop a car that's not driving
nova3.showState();
nova3.drive();
nova3.stop();
}
}
class Car
{
private boolean isStarted;
private boolean isDriving;
private boolean isStopped;
private String showState;
public Car()
{
this.showState = showState;
}
public void start()
{
isStarted = true;
isDriving = false;
isStopped = false;
System.out.println("The car is " + this.showState);
}
public void drive()
{
isStarted = false;
isStopped = false;
isDriving = true;
System.out.println("The car is " + this.showState);
}
public void stop()
{
isStopped = true;
isStarted = false;
isDriving = false;
System.out.println("The car is " + this.showState);
}
public String showState()
{
if (isStarted)
{
showState = "started";
}
else if(isDriving)
{
showState = "driving";
}
else if(isStopped)
{
showState = "stopped";
}
System.out.println("The car is " + this.showState);
return showState;
}
}
我的输出完全错误-值不正确:
Scenario 1
The car is null
The car is started
The car is started
The car is started
The car is stopped
Scenario 2
The car is null
The car is null
The car is null
The car is stopped
Scenario 3
The car is null
The car is null
The car is started
The car is started
The car is stopped
The car is stopped
The car is stopped
很抱歉,如果这个帖子都不可靠。我输入的很好,但是预览看起来很糟糕。我建议的是,每辆车都有自己独特的id:
class Car
{
private boolean isStarted;
private boolean isDriving;
private boolean isStopped;
private String showState;
private int id;
public Car(Integer id)
{
this.id = id;
}
...
}
然后在你说打印输出的所有地方,也包括id:
System.out.println("The car id "+id+" is "+ this.showState);
然后创建一个如下所示的对象:
Car nova1 = new Car(1);
Car nova2 = new Car(2);
Car nova3 = new Car(3);
这不是解决办法,但它为解决办法铺平了道路。您将找到解决方案,您将感受到它的味道,因为您刚刚创建了一个新实例。实际上,您从未为这些实例设置默认值 至少可以这样考虑:
public Car()
{
isStopped = true;
}
这样,当你打电话给你的第一个nova1.start;你可以在允许它重新开始之前检查它是否为真
public void start()
{
if(isStopped)
{
isStarted = true;
isDriving = false;
isStopped = false;
showState = "started";
System.out.println("The car is " + this.showState);
}
}
举个例子。但是你可以很容易地用它来推断你的其他需求。我的观点主要是创建一个实例,但期望布尔值有一个值,而不需要指定。您可以在默认情况下或在构造函数中执行此操作
例如:
private boolean isStarted = false;
您必须在代码中翻译所要求的内容,正如您所看到的,它甚至非常接近实际需求-例如: 如果未启动车辆,则无法驾驶车辆。请向控制台发送错误消息 变成:
public void drive()
{
if( this.isStarted == false ){
System.out.println("You should start the car first!");
}else{
System.out.println("Car is running!");
}
}
注意,你可以写!this.isStarted是isStarted==false的缩写。这实际上并没有做任何事情
public Car()
{
this.showState = showState;
}
基本上,它只是将相同的值重新分配给自身。我会切换到初始状态,可能是停止
我会使用enum作为我的汽车状态,而不是依赖布尔状态,这可能会变得混乱
public enum CarState {
Stopped,
Started,
Driving
}
然后只需将其分配给单个状态变量
class Car
{
private CarState state;
public Car()
{
this.state= CarState.Stopped;
}
public void start()
{
if (state.equals(State.Stopped)) {
state = CarState.Started;
showState();
} else {
System.error.println("Car is not in a valid state to be started");
}
}
public void drive()
{
if (state.equals(State.Started)) {
state = CarState.Driving;
showState();
} else {
System.error.println("Car is not in a valid state to be driven");
}
}
public void stop()
{
if (state.equals(State.Driving)) {
state = CarState.Stopped;
showState();
} else {
System.error.println("Car is not in a valid state to be stopped");
}
}
public String showState()
{
System.out.println("The car is " + state);
}
}
您遇到的另一个问题是,更改状态时未调用showStatus,这不会将当前状态分配给showState变量……我已使用enum纠正了这一问题。请尝试在每个步骤中输出变量的值。逻辑流程中存在一些问题。例如,检查构造函数
public Car()
{
System.out.println(showState);
this.showState = showState;
}
没有任何showState值被传递给构造函数,其值也没有在函数内部初始化
此外,在每个函数启动、停止和驱动中,您需要编写:
System.out.println("The car is " + this.showState());
而不是:
System.out.println("The car is " + this.showState);
让我们保持简单,为什么在只需要两个变量时使用3个变量?如果我错了是正确的,但是如果一辆车没有启动,而你没有驾驶它,那么它就会停下来,对吗?看看我的班级:
public class car
{
private boolean isStarted;
private boolean isDriving;
public car()
{
isStarted = false;
isDriving = false;
//Initial State
showState();
}
public void start()
{
if(!isStarted)
{
if(!isDriving)
isStarted = true;
}
else
System.err.println("You can\'t start a car which is already started"); //You can’t start a car if it is already started (send an error message to the console).
showState();
}
public void drive()
{
if(isStarted)
isDriving = true;
else
System.err.println("You can\'t drive a car which is not started");
showState();
}
public void stop()
{
if(isStarted)
{
isStarted = false;
isDriving = false;
// Once you call stop, the car will return to the initial state and the user must start the car before attempting to do any other functions. (Send a message to the console. (Below on ShowState)
}
else
System.err.println("You can\'t stop a car which is not started"); // You can’t stop a car if it is not started (send an error message to the console).
showState(); // Once you tell the car to drive, the only thing you can do is stop (Send a message to the console)
}
public void showState()
{
if(isStarted && isDriving)
System.out.println("It\'s Driving");
if(!isStarted && !isDriving)
System.out.println("It\'s Stopped");
if(isStarted && !isDriving)
System.out.println("It\'s Started");
}
}
我希望这有帮助。干杯使用enum是个好主意。 这里是一个使用Enum的实现,Enum使用默认实现,自己的实现使用typesystem。 也没有任何条件,比如if或switch。 只是纯粹漂亮的Java代码
public class Car {
private enum State {
OFF {
void start(Car c) {
System.out.println("Starting the car");
c.state = State.STARTED;
}
},
STARTED {
void stop(Car c) {
System.out.println("Stopping the car");
c.state = State.OFF;
}
void drive(Car c) {
System.out.println("Driving the car");
c.state = State.DRIVING;
}
},
DRIVING {
void stop (Car c) {
System.out.println("Stopping the car");
c.state = State.OFF;
}
};
void start(Car c) {
System.err.println("Can't start");
}
void stop(Car c) {
System.err.println("Can't stop");
}
void drive(Car c) {
System.err.println("Can't drive");
}
}
private State state = State.OFF;
public void start(){
state.start(this);
}
public void stop(){
state.stop(this);
}
public void drive() {
state.drive(this);
}
public void showState(){
System.out.println("The car is "+state);
}
}
这成功了!谢谢你的帮助
public class MyAppAssignment3
{
public static void main (String[] args)
{
System.out.println("Scenario 1");
Car nova1 = new Car();
nova1.start();
nova1.showState();
nova1.drive();
nova1.stop();
nova1.showState();
System.out.println("");
System.out.println("Scenario 2");
Car nova2 = new Car();
nova2.showState();
nova2.drive();
nova2.stop();
nova2.showState();
System.out.println("");
System.out.println("Scenario 3");
Car nova3 = new Car();
nova3.showState();
nova3.start();
nova3.showState();
nova3.stop();
nova3.showState();
nova3.drive();
nova3.stop();
}
}
class Car
{
private boolean isStarted;
private boolean isDriving;
private boolean isStopped;
private String showState;
public Car()
{
isStarted = false;
isDriving = false;
isStopped = true;
}
public void start()
{
if(isStarted == false)
{
isStopped = false;
isStarted = true;
showState();
}
else
{
System.out.println("You can't start a car which is already started.");
}
}
public void drive()
{
if(isStarted)
{
isDriving = true;
showState();
}
else
{
System.out.println("You can't drive a car which is not started.");
}
}
public void stop()
{
if(isStarted)
{
isStarted = false;
isDriving = false;
isStopped = true;
showState();
}
else
{
System.out.println("You can't stop a car which is not started.");
}
}
public String showState()
{
if(isStarted && (isDriving == false))
{
showState = "started";
}
else if(isStarted && isDriving)
{
showState = "driving";
}
else if(isStopped)
{
showState = "stopped";
}
System.out.println("The car is " + this.showState + ".");
return showState;
}
}
非常感谢。花了一段时间,但我从你的回复中拼凑出了一些有用的东西。非常感谢!别忘了说答案是正确的。这会增加你的声望,也会增加你的回答者。这是一个很好的方式为网站,以确定您的问题,以及解决