2012-02-19 7 views
2

나는 javaprogrammingforums.com에서이 같은 질문을했지만 웹 사이트가 다운 된 것 같습니다. 그래서 나는 어떤 반응을 보았는지 알 수 없었다. 어쨌든, 나는이 Java HW 할당에 심하게 붙어 있습니다. 지금까지 내가 완료 한 점이 좋았습니다. 이제는 올바른 값을 표시하는 것입니다.생성자 매개 변수의 값으로 배열 초기화 - 초기화 할 수 없습니까?

(이것은 다른 하나는 "테스터"입니다, 생성자와 두 번째 클래스의 일부)

//private variables 
boolean myP; 
boolean myPla; 
boolean myGl; 
boolean myCa; 

double myPlot; 
int myCrust; 

double myReduct; 
double myNet; 
double myGross; 

boolean [] trshIt = {myP, myPla, myGl, myCa}; 
double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca) 
{ 
    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 
} 

내 문제가 있다는 부울 배열, trshIt :이이 척 . 아직 초기화되지 않은 변수를 배열에 넣으므로 변수의 기본값은 false입니다. 먼저 생성자에 넣으면 변수 trshIt을 찾을 수 없다는 오류가 발생합니다. 그 변수를 호출하고있는 인스턴스를 가리킨다. 그래서 저는 다른 영역에서 다른 형태의 것을 시도해 보았습니다. 그리고 나는 지금 당장 배열이 적절하게 작동하도록 노력하는 미로에 빠져있는 것과 같습니다. 내가 얻을 수있는 모든 도움이 필요해. 아이디어?

+0

동일한 질문을 여러 곳에 게시하지 마십시오. 또한 가장 중요한 태그를 제외한 많은 태그를 추가했습니다. "Java"... –

+0

음. 글쎄, 다른 토론회가 끝났어. 이건 내 첫 번째 글이다. 그리고 태그를 수정 하겠어. – Michael

답변

0

클래스의 구성원으로 선언 trshIt하지만,이 같은 생성자에서 초기화 :

boolean [] trshIt; 
double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca) 
{ 
    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 

    trshIt = new boolean[4]; 
    trshIt[0] = myP; 
    trshIt[1] = myPla; 
    trshIt[2] = myGl; 
    trshIt[3] = myCa; 
} 
+0

흠, 좋은 시도, 비록 내가 그것을 시도하고 trshIt 배열에 첫 번째 squiggly 괄호 바로 전에 '표현의 불법적 인 시작'오류가 발생합니다. 그리고 내가 왜 이것을 얻는 지 불분명합니다. – Michael

+0

'trshIt = new boolean [] {myP, myPla, myGl, myCa};' –

+0

변수를 선언 할 때만 단축키 배열 표기법을 사용할 수 있습니다. 즉,'boolean [] a = {true, false};'but가 아닌'boolean [] a; a = {true, false}; ' – scibuff

0

당신은이 작업을 수행 할 수있는 모든 이유 : 자바에서

//private variables 
boolean myP; 
boolean myPla; 
boolean myGl; 
boolean myCa; 

double myPlot; 
int myCrust; 

double myReduct; 
double myNet; 
double myGross; 

boolean [] trshIt; 
double [] CO2TrashEmissions; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca){ 

    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 
    trshIt = new boolean[4]; 
    trshIt[0] = myP; trshIt[1] = myPla; 
    trshIt[2] = myGl; trshIt[3] = myCa; 

    double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 
} 

, 프리미티브 01,230 때문에 (INT는, 문자, 부울은) 값으로 할당된다, 그래서 당신이 할 경우

boolean b = true; 
boolean[] a = { b }; 
b = false; 

System.out.println((a[0] == true) ? "true" : "false"); 

은 "true"로 인쇄됩니다은 "포인터"를 b에 저장하지 않기 때문에 a 배열의 값을 변경하지 않지만 b에 있던 값을 저장합니다.

+0

흠, 나는 당신의 스타일을했고 나는 그 첫 번째 오류를 통과 할 수있었습니다. 하지만 스크립트를 실행하면 for 루프에서 길이를 물어 보면 ** trshIt **이 null이라는 오류가 발생합니다. 디버거에서 값을 보더라도 null이라고보고합니다. 전에는 그런 적이 없었습니다. 생각? 오류 1을 통해 나를 도와 주셔서 감사합니다. – Michael

+0

이 특정 생성자가 호출되지 않은 경우에만 null이 될 수 있습니다. 하나 이상의 생성자가 있습니까? 아니면 어디서나'new CO2FromWaste (crust, p, pl, gl, ca)'대신에'new CO2FromWaste()'를 사용합니까? – scibuff

+0

저는 하나의 생성자 만 가지고 있으며, arraylist에서 여러 번 매개 변수를 가진 새로운 CO2FromWaste를 객체로 사용했습니다. – Michael

2

trshIt은 생성자에서 초기화되기 전에 필드에서 값을 가져 오기 때문에 작동하지 않습니다.

다른 모든 변수가 작동해야 생성자에서 trshIt을 초기화합니다.

또한 CO2TrashEmissions가 보이기 때문에 상수이기 때문에 (아마 myPlot도?), 변경하지 못하도록 static 및 final로 선언해야합니다. 요소 자체에 대한 수정을 막지는 못합니다.

private static final double[] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8}; 
//Fields.... 
boolean[] trshIt; 

//constructor 
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca) 
{ 
    myPlot = 1018.0; 
    myCrust = crust; 
    myP = p; 
    myPl = pl; 
    myGl = gl; 
    myCa = ca; 

    trshIt = new boolean[]{myP, myPla, myGl, myCa}; 
} 

또한, 논리 값이 내 * 변수 중 하나를 변경, 리터럴이기 때문에 프로그램이 무엇을하고 있는지에 따라 문제가 될 수 배열의 해당 요소를 변경하지 않습니다.

+0

나는 정보를 계산하고 인쇄하기 위해 주로 arrayLists를 사용하고있다. 부울 변수는 필요에 따라 변경되었습니다. 나는 그것이 나에게 아직 가르쳐지지 않았기 때문에 스크립트에서 정적이나 최종 같은 용어를 사용할 수 있다고 생각하지 않는다. 그러나 믿을 수만 있다면, 나는 그 곳곳에 있었을 것이다. 더 쓸모있는 것들이 더 좋습니다. 나는 비슷한 상황에 있고 그것의 지옥에 대한 스크립트를 작성하는 경우 이것을 참조 할 것입니다. – Michael

+0

개체를 조작하는 메서드를 사용하여 필드를 수정할 때 생성자 외부를 의미했습니다. 나중에 해당 개체에 대해 배울 필요가 있습니다. 행운을 빌며 필요한 것을 배우는 것을 주저하지 마십시오. – Hedja