2012-04-08 3 views
0

프로그램 메인에서 메서드를 호출하는 데 문제가 있습니다.메서드 호출시 문제가 발생했습니다.

setNoOfVehicles() : 소유 차량의 수를 돌려줍니다 다음과 같이

프로그램 사양입니다.

setWeeklyFuelCost() : 소유 한 모든 차량에 대한 평균 주간 가스 비용을 반환합니다.

calcYearlyFuelCost() : 평균 주간 연료 비용을 받고 연평균 연료 비용을 반환합니다.

displayFuelCost() : 소유 차량 수, 평균 주간 연료비 및 평균 연비를받습니다.

main()

:

통화 setWeeklyFuelCost() 저장 로컬 변수의 리턴 값.

setNoOfVehicles()에 대한 호출, 평균 주간 연료 비용의 지역 변수 및 calcYearlyFuelCost()에 대한 호출로 전화하여 displayFuelCost()을 호출합니다.

스캐너가 마지막 사양은 하나가 나를 잡고 글로벌 수준

public static void main(String[] args) 
{ 

double x = setWeeklyFuelCost(); 

displayFuelCost(setNoOfVehicles(), x, calcYearlyFuelCost(x)); //This is the correct parameters I needed to pass thru displayFuelCost(). I didn't know this at the time and this is what I was trying to ask in this post. 
} 

private static int setNoOfVehicles() 
{ 

System.out.print("How many vehicles do I own? "); 
int noOfVehicles = input.nextInt(); 
return noOfVehicles; 
} 

private static double setWeeklyFuelCost() 
{ 


System.out.print("Enter the average weekly fuel cost for my vehicles: "); 
double weeklyFuelCost = input.nextDouble(); 
return weeklyFuelCost; 

} 

private static double calcYearlyFuelCost(double weeklyFuelCost) 
{ 

double yearlyFuelCost = 0.0; 
yearlyFuelCost = weeklyFuelCost * 52; 
return yearlyFuelCost; 

} 

private static void displayFuelCost(int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost) 
{ 
double difference = yearlyFuelCost - 5044.00; 

if(yearlyFuelCost > 5044.00) 
{ 
System.out.printf("No of Vehicles: %d\n" 
       + "Avg Weekly Fuel Cost: $%,.2f\n" 
       + "Avg Annual Fuel Cost: $%,.2f\n\n" 
       + "I am OVER budget by $%,.2f.", noOfVehicles, weeklyFuelCost, yearlyFuelCost, difference); 
} 
else if(yearlyFuelCost < 5044.00) 
{ 
difference = difference * -1; 
System.out.printf("No of Vehicles: %d\n" 
       + "Avg Weekly Fuel Cost: $%,.2f\n" 
       + "Avg Annual Fuel Cost: $%,.2f\n\n" 
       + "I am UNDER budget by $%,.2f. PAARRTY!!! ", noOfVehicles, weeklyFuelCost, yearlyFuelCost, difference); 
} 
else 
{ 
System.out.printf("No of Vehicles: %d\n" 
       + "Avg Weekly Fuel Cost: $%,.2f\n" 
       + "Avg Annual Fuel Cost: $%,.2f\n\n" 
       + "I am RIGHT ON BUDGET!", noOfVehicles, weeklyFuelCost, yearlyFuelCost, difference); 
} 

} 

} 

에서 선언, 전화 displayFuelCost()

내 문제는 내가 필요 정확히 어떤 매개 변수 몰랐습니다 displayFuelCost()을 통과해야합니다. 이 질문을하기 전에 위의 변수 x를 사용해야한다는 것을 알았습니다.

displayFuelCost(setNoOfVehicles(), x, calcYearlyFuelCost(x)); 제대로 작동하려면 메인 입력에 필요한 모든 것이 었습니다.

+3

어떤 특정 문제가 있습니까? –

+0

무엇이 문제입니까? – Bnjmn

+0

@OliCharlesworth - 그는 전화를하지만 오지 않을 것입니다. –

답변

1

붙여 넣은 코드에 클래스 정의가 없습니다. 주요-방법은 다음 다른 클래스 displayFuelCost-방법 인 경우에, 당신은 대중에게

private static void displayFuelCost(int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost) 

을 변경해야합니다 :

말했다에 beeing 그건
public static void displayFuelCost(int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost) 

, 난 당신이 과도하게 권하고 싶지 않다 정적 메소드의 사용. 적절한 객체 지향 스타일을 사용하지 않아야하는 이유가 표시되지 않습니다 (또는 정적으로 보이려면 최소한 싱글 톤 패턴을 사용해야합니다).

는 편집 // :

코드의이 부분 IST 문제 : 주요 기능 내부

public static void main(String[] args) 
{ 

double x = setWeeklyFuelCost(); 

displayFuelCost(); //<-- need arguments here! 

, 당신은 displayFuelCost-메소드를 호출하지만 필요한 매개 변수를 제공하지 마십시오 . 이 방법의 선언을 살펴있을 때 : 정수, 이중 및 다른 이중 :

private static void displayFuelCost(int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost) 

}

을 당신은 3 개 개의 매개 변수를 필요로하는 참조하십시오.displayFuelCost 함수를 호출하는 동안 이들을 제공해야합니다. 그런 예를 들면 :

public static void main(String[] args) 
{ 

double x = setWeeklyFuelCost(); 

displayFuelCost(1, 2.5, 2.5); //<-- need parameters here! 

}

// 편집 2 : 전체 코드에 더 많은 문제가 있습니다

. 나는 그들에 관한 새로운 대답을 추가했다.

+0

내 이름과 운동 번호가 있으므로 클래스 정의를 붙여 넣지 않았습니다. 주된 방법은이 클래스에 있습니다. 모든 주요 내용은 다음과 같습니다. setWeeklyFuelCost()를 호출하고 반환 된 값을 로컬 변수에 저장하고 평균 주간 연료 비용의 지역 변수 인 setNoOfVehicles()에 대한 호출로 인수로 displayFuelCost()를 호출하여 호출합니다. , calcYearlyFuelCost()에 대한 호출이 포함됩니다. – Abweichung

+0

친애하는 Abweichung, 나는 당신의 코드를 면밀히 살펴 봤고 당신이 당신의 문제를 해결하는 데 필요한 기본적인 이해가 없다는 것을 두려워합니다! 게시 한 특정 버그를 수정하더라도 코드는 사용자가 의도 한대로 수행하지 않습니다. 당신은 객체 지향 디자인의 기초를 살펴 봐야합니다. 그렇지 않으면 멀리 가지 않을 것입니다. 예를 들어 선언 된 인스턴스 변수가 없으므로이를 설정하거나 가져올 수 없습니다. – Zakum

+0

displayFuelCost (setNoOfVehicles(), x, calcYearlyFuelCost (x)); 위에 나열된 사양에 대한 코드 기능을가집니다. – Abweichung

2

클래스에 정의되지 않은 displayFuelCost() 메서드를 호출합니다. 대신 방법이 있습니다.

private static void displayFuelCost(int noOfVehicles, double weeklyFuelCost, double yearlyFuelCost) { ... } 

세 가지 매개 변수가 필요합니다.

오류를 제거하고 어떤 결과를 얻을 수

displayFuelCost(1, 100.0, 5200.0); // sample values 

에 메서드 호출을 변경

. 나는 내 솔루션 작동하는지 증명할 수 스캐너의 코드와 클래스가 없기 때문에

0

, 당신은 그것을 밖으로 시도해야합니다 :

public class Test { 
    public static void main(String[] args) { 

     int vehicleNumber = setNoOfVehicles(); 
     double costWeek = setWeeklyFuelCost(); 
     double costYear = calcYearlyFuelCost(costWeek); 

     displayFuelCost(vehicleNumber, costWeek, costYear); 
    } 
// rest of your code 
} 

을하지만 다시 한 번 당신을 경고해야, 선생님이 전달하기를 바라는 바가 아닐 것입니다. Main 메소드 (예 : Test test = new Test())에서 인스턴스를 생성하고 인스턴스 측 메소드 (즉, 처음에는 정적이 아닌 메소드)를 사용하여 작업을 수행하는 클래스를 원합니다. 다시 시도하는 것이 좋습니다. ;)

관련 문제