2014-12-06 3 views
0

저는 Java에서 초보자입니다. 아래 프로그램을 해결하려고 시도했지만 오류가 발생했습니다. 누군가 내가 실수를하고 있다고 말할 수 있습니까? 여기 Java 프로그램에서 오류가 발생합니다.

public class TestGlass 
    { 
     public static void main(String [] args) 
     { 
      Glass milk = new Glass(15); // 15 ounces of milk 
      Glass juice = new Glass(3); // 3 ources of juice 



     milk.drink(2); 
     milk.drink(1); 

     milk.report(); 

     juice.fill(6); // went from 3 to 9 ounces 
     juice.drink(1); // now down to 8 ounces 

     juice.report(); 

     juice.spill(); 

     juice.report(); 
    } 
} 

class Glass 
{ 

    int ounce; 

    public void spill() 
    { 
     ounce = 0; 
    } 


    public void drink(int x){ 
     ounce = ounce-x; 
    } 

    public void fill(int x){ 
     ounce = ounce+x; 
    } 

    public int getOunce() 
    { 
     return ounce; 
    } 


    public void report() 
    { 
     int x = getOunce(); 
     System.out.println("Glass has " + x + " ounces"); 
    } 

} 

당신은 당신의 ounce 매개 변수를 받아 Glass에 생성자를 추가 할 필요가

TestGlass.java:5: error: constructor Glass in class Glass cannot be applied to given types; 
     Glass milk = new Glass(15); // 15 ounces of milk 
       ^
    required: no arguments 
    found: int 
    reason: actual and formal argument lists differ in length 
TestGlass.java:6: error: constructor Glass in class Glass cannot be applied to given types; 
     Glass juice = new Glass(3); // 3 ources of juice 
        ^
    required: no arguments 
    found: int 
    reason: actual and formal argument lists differ in length 
2 errors 
+0

'Glass' 클래스에 생성자가 없습니다. –

+0

* 생성자 *가 무엇인지 아십니까? 그렇지 않다면 https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html – Pshemo

+0

을 읽어야합니다. 향후 작업에 유용한 힌트가 있습니다. http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

답변

1

오류입니다.

class Glass { 
.... 
    public Glass (int ounce) { 
     this.ounce = ounce; 
    } 
.... 
} 

생성자는 당신이 new 연산자를 사용할 때 호출되는 방법이다. 그 일은 클래스의 객체 인스턴스를 초기화하는 것입니다. 하나 이상의 인수가있는 생성자는이 클래스와 같은 인스턴스 변수를 초기화하는 값을 받도록 설정됩니다.

오류 메시지가 생성자를 이미 언급 한 것에 유의하십시오. 자체 생성자를 지정하지 않으면 Java는 인수를받지 않는 기본 생성자를 추가하기 때문입니다. 이 기본 no-arg 생성자는 new을 호출 할 때 호출 된 것입니다. 인수를 인수가없는 생성자에 전달 했으므로 오류가 발생했습니다. 자신의 생성자를 추가하면 기본 no-arg 생성자가 사라집니다. 무 arg 버전을 원한다면 (예 : ounce에서 0 또는 기본값으로 설정), 내가 준 것과 함께 지정하여 다시 가져올 수 있습니다. 즉, 생성자를 오버로드 할 수 있습니다 아래 링크 참조).

class Glass { 
    .... 
     public Glass() { 
      this.ounce = 1; 
      /* In this setup, a glass always has at least 1 ounce */ 
      /* If you want it be 0, you could say this.ounce = 0, or */ 
      /* just leave everything inside {} blank, since ounce will */ 
      /* default to 0 anyway */ 
     } 

     public Glass (int ounce) { 
      this.ounce = ounce; 
     } 
    .... 
    } 

new Glass()를 호출하면 첫 번째 인수 없음의 생성자를 호출한다. new Glass(15)을 호출하면 인수를 취하는 두 번째 생성자가 호출됩니다.

Here's a nice tutorial 생성자에.

Here's a nice tutorial 과부하 생성자에서.

+1

그 URL을 주셔서 감사합니다 ... –

+1

나에게 생성자에 대한 아이디어를 주셔서 감사합니다, 대단히 감사합니다 .... –

+0

내 기쁨. 자바 즐기기! –

0

인수를 취하는 Glass 생성자를 작성해야합니다.

class Glass { 
    int ounce; 

    public Glass(int ounce) { 
     this.ounce = ounce; 
    } 

    public void spill() 
    { 
     ounce = 0; 
    } 


    public void drink(int x){ 
     ounce = ounce-x; 
    } 

    public void fill(int x){ 
     ounce = ounce+x; 
    } 

    public int getOunce() 
    { 
     return ounce; 
    } 


    public void report() 
    { 
     int x = getOunce(); 
     System.out.println("Glass has " + x + " ounces"); 
    } 

} 
+0

고맙습니다 ... –

+0

생성자에 대한 아이디어를 주셔서 감사합니다. 대단히 감사합니다. 또한 프로그램 해결을위한 조언. –

관련 문제