2012-10-02 2 views
0

나는 학생이고, 네, 이것이 내 숙제입니다. 지난 주에 노트를 검토하고, 책을 읽고, 인터넷에서 관련 주제를 연구하는 데 썼지 만 문제가 무엇인지 알지 못합니다. 내가 뭘 잘못하고 있는지 말해 줄 수있어? 어떤 도움이라도 대단히 감사하겠습니다. (필자는 메모장과 명령 프롬프트 만 사용하고 있습니다.)자바 초보자 용 자동차

제공된 지침 : 두 개의 클래스로 구성된 Java 응용 프로그램을 만듭니다. 클래스 1이 어플리케이션 클래스입니다. 2 등급은 자동차 등급입니다. 응용 프로그램에서 nova라는 Car 인스턴스를 만들고이를 구동합니다. 차에 대한

규칙 :

  • 당신은 그것을가 시작되지 않은 경우 자동차를 운전 (콘솔에 오류 메시지를 전송) 할 수 없다.
  • 자동차가 시동되지 않으면 멈출 수 없습니다 (콘솔에 오류 메시지를 보내십시오).
  • 자동차가 이미 시작된 경우 자동차를 시작할 수 없습니다 (콘솔에 오류 메시지가 전송 됨).
  • 차를 운전한다고 말하면 멈춤 (콘솔에 메시지 보내기)
  • 중지를 호출하면 차는 초기 상태로 돌아가고 사용자는 차를 시동해야합니다 다른 기능을 시도하기 전에 (콘솔에 메시지 보내기)

showState 메서드의 목적은 자동차 상태를 검사하는 방법을 제공합니다. 메시지를 작성해야 콘솔로 보낼 수 있습니다.

내 코드 : (모든 잘못 - 값이 올바르지 않습니다)

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 

죄송합니다. 나는 그것을 벌써 타이프했다. 그러나 미리보기는 고집이 세다. 내가 제안 무엇

답변

0

모든 도움에 감사드립니다!

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; 
    } 

} 
0

는 각 차량이 자신의 고유 ID가, 이것이다 :

System.out.println("The car id "+id+" is "+ this.showState); 

는 다음을 만들 : 당신이 인쇄 말을 모든 곳에서 다음

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를 포함 그런 객체 :

Car nova1 = new Car(1); 

Car nova2 = new Car(2); 

Car nova3 = new Car(3); 

해결책은 아니지만 해결책을 제시합니다. 당신은 해결책을 발견하고 u는 그것의 맛을 느낄 것이다.

+0

+1이 이드의 출력을 식별하는 좋은 방법입니다.) – MadProgrammer

2

단지 하나의 새로운 인스턴스를 만들고있는 중이다. 실제로 이러한 인스턴스의 기본값을 설정하지 않습니다. 첫 번째 isStopped가 다시 시작 허용하기 전에 사실 여부를 확인할 수 있습니다 nova1.start(); ...

public void start() 
{ 
    if(isStopped) 
    { 
     isStarted = true;  
     isDriving = false;  
     isStopped = false; 
     showState = "started";  
     System.out.println("The car is " + this.showState); 
    } 
} 

을 그냥 전화

public Car() 
{ 
    isStopped = true; 
} 

그 방법 :

이 같은 적어도 뭔가를 고려 하나의 예.그러나 당신은 쉽게 그것을 사용하여 나머지 요구 사항을 외삽 할 수 있습니다. 내 요점은 주로 인스턴스를 만들지 만 부울 값이 지정되지 않은 채 값을 가지기를 기대한다는 것입니다. 기본값이나 생성자에서이 작업을 수행 할 수 있습니다. 예를 들어

:

당신은 당신이 물어 봤는데 어떤 코드로 번역하고, 당신이 방법 가까운 실제 요구 사항도 있어요 볼 수해야
private boolean isStarted = false; 
0

- 예 :

당신 인 경우 차량을 운전할 수 없습니다. (콘솔에 오류 메시지를 보내십시오).

이된다 : 당신이 isStarted == false을위한 속기로 !this.isStarted을 쓸 수

public void drive() 
{ 

    if(this.isStarted == false){ 

     System.out.println("You should start the car first!"); 

    }else{ 

     System.out.println("Car is running!"); 

    } 

} 

알 수 있습니다.

4

이 실제로 아무것도하지 않습니다 ...

public Car() 
{ 
    this.showState = showState; 
} 

기본적으로, 그것은 단순히 다시 자체에 같은 값을 할당합니다. 난 그저 그런 ... 내가 뒤죽박죽이 될 수 boolean 상태에 의존보다는, 내 차의 상태를 enum를 사용하는 거라고 stopped

의 아마 초기 상태로

public enum CarState { 
    Stopped, 
    Started, 
    Driving 
} 

를 변경 지정할 것 하나의 state 변수에 ...

이 발생하는 또 다른 문제는 당신이 상태를 변경할 때 showStatus가 현재 통계를 할당하지 않는, 호출 된되지 않는 것입니다
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); 
    } 
} 

e를 showState 변수 ... 사용하여 수정했습니다. enum

+0

열거 형은 분명히 좋은 아이디어입니다. – tehdoommarine

0

각 단계에서 변수 값을 출력 해 봅니다. 논리적 흐름에는 몇 가지 문제가 있습니다. 예를 들어 생성자를 확인하십시오.

public Car() 
{ 
    System.out.println(showState); 
    this.showState = showState; 
} 

생성자에 전달되는 showState 값이없고 함수 내에서 초기화되지 않습니다.

System.out.println("The car is " + this.showState()); 

대신 : 당신은 단지 필요로 할 때 3 개 변수를 사용하는 이유

System.out.println("The car is " + this.showState); 
0

,의는 간단하게하자

또한

은 각 기능의 시작 내부, 중지 및 드라이브, 당신은 쓸 필요가 두? 내가 틀렸다면 정정하십시오. 그러나 차가 시동을 걸지 않고 운전하지 않으면 멈추게됩니다. 맞습니까? 내 수업을보세요 :

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"); 
} 

} 

나는 그것이 도움이되기를 바랐다. 건배

+0

감사합니다 !!! 잠시 시간이 걸렸지 만 회신에서 작동하는 것을 함께 연결했습니다. 무리 감사! – user1713223

+0

답이 옳다는 것을 잊지 마십시오. 평판 포인트를 추가하고 누구에게도 답변을 제공합니다. 사이트가 귀하의 문제를 식별 할 수있는 좋은 방법이기도합니다. –

1

열거 형을 사용하는 것은 좋은 생각입니다. 다음은 Enum, Enum을 기본 구현으로 사용하고 유형 시스템을 사용하여 자체 구현을 사용하는 구현입니다. if 또는 switch와 같은 조건부도 없습니다. 순수하고 아름다운 자바 코드.

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); 
    } 
} 
+0

참으로 근사합니다. –