2015-02-24 81 views
2

我很努力地理解函數如何在main之外工作。我只需要計算用戶輸入的主要信息的總數,但是我應該調用一個函數來總和這個信息。這裏是我到目前爲止的代碼,我相信它是不是很接近正確,在正確的方向輕推將是一個巨大的幫助在c中使用函數#

namespace ConsoleApplication17 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string customerName, customerState; 
     double numberItems, itemPrice; 
     Console.WriteLine("Please enter the customer name"); 
     customerName = Console.ReadLine(); 
     Console.WriteLine("Please enter the state in which you reside:"); 
     customerState = Console.ReadLine(); 
     Console.WriteLine("How many items were purchased?"); 
     numberItems = int.Parse(Console.ReadLine()); 
     Console.WriteLine("What was the price of said items?"); 
     itemPrice = Convert.ToDouble(Console.ReadLine()); 

    } 
    public static double ComputeTotal (double total) 
    { 
     double totalAmount; 
     Console.Write(total); 
} 

}

public static double ComputeTax (double totalAmount, string state, string fl, string nj, string ny) 
    { 
    if (state == fl) 
     return totalAmount*.06; 
    else if (state == nj) 
     return totalAmount*.07; 
    else if (state == ny) 
     return totalAmount*.04; 
    } 

總之,我需要使用函數ComputeTotal來乘以numberItems和itemPrice

+0

爲什麼不直接調用'ComputeTotal()'? – Houseman 2015-02-24 02:34:36

+1

我首先將方法的數量和價格傳遞給方法,進行計算並返回結果。 – 2015-02-24 02:34:50

+0

@GrantWinney所以這裏是我想說的話,不要太羅嗦。這是爲了上課,我的老師很快就過去了,我不知道如何將這些傳遞給方法。我一直在看例子,但沒有像樣的解釋,僅靠我自己就很難。 – Wardy24 2015-02-24 02:36:40

回答

3

函數基本上會從您那裏獲取一些數據並返回(其他一些?)數據給您。 在你的情況下,你想給這個函數2個數據 - 數量和價格,並且你想讓它返回你的總價格。

public static double ComputeTotal(double qty, double price) 
{ 
    return qty* price; 
} 

此函數ComputeTotal接受2個類型爲double的變量。 他們是數量和價格。 函數然後將這兩個變量相乘並將結果返回給調用者。

在你的主要方法中,這是你如何使用(調用)函數。

static void Main(string[] args) 
{ 
    // rest of your code here 


    var total = ComputeTotal(numberItems, itemPrice); 

    Console.WriteLine(total); 

} 

這裏我創建了一個名爲total的新變量,我將ComputeTotal函數的返回值賦值給這個變量。

ComputeTotal函數需要2個參數,我傳遞了2個在代碼中創建的變量。爲了簡潔,我沒有輸入任何原始代碼,並且您的代碼應該位於我的評論「//此處的其他代碼」位置。

+0

不確定它是否超出問題範圍,但如果ppl未鍵入十進制數,則程序將炸燬。例如ABC而不是1.25 – failedprogramming 2015-02-24 02:41:29

+0

好的,所以我得到一個錯誤,說方法ComputeTotal沒有超載需要0個參數。我對此很新,是否有某種方式我應該在主要方面調用它? – Wardy24 2015-02-24 02:45:07

+0

如果你看看我的第二個代碼塊在「var total = ComputeTotal(numberItems,itemPrice);」你有沒有在你的代碼中做同樣的事情並傳遞這兩個變量?即括號內的東西。 – failedprogramming 2015-02-24 02:46:27

1
your method/function could be like this 
    public static double ComputeTotal (double itemPrice, int quantity) 
    { 
     return itemPrice * quantity 
    } 
在main方法

你可以像這樣

static void Main(string[] args) 
    { 
    double total_price=0.0; 
    total_price = ComputeTotal (itemPrice, numberItems) 
    Console.WriteLine("totl price : {0}",total_price); 
} 
1

理解函數的工作

我顯著蒸餾的,但對這個定義的函數是一個真正的method它返回一個值。在C#中,functionsmethods之間沒有區別,區別在於它們是返回數據還是在類實例的引用實例上運行。

的真正區別是在調用機制一個是否實例(一類叫new);他們實例化一個類。對於這項任務,你的老師不希望你實例化一個班級。

因此,你會調用功能(S)這是static方法可以由任何人沒有實例任何類調用。

考慮到這一點,你的老師希望你讓他/她要你創建一個static方法關閉類Program可以通過Main因爲它是靜態的,以及被稱爲學習function類型的呼叫。

所以創建你的函數類型靜態方法將返回一個值;因此它會在其他語言中模仿functions

以外主。

Main現在可具有靜態方法,但這樣可以其它類能夠從Main的靜態方法內調用爲好。

像這樣的其他類看起來像這樣...並且通過完全限定位置(例如{ClassName})而被稱爲{Static Method Name}

class Program { 

static void Main(...) 
{ 
    Console.WriteLine(TheOtherClass.AFunction()); 
} 
} 

public class TheOtherClass 
{ 
    public static string AFunction() 
    { 
     return "A String From this Function. :-) "; 
    } 
} 

注意如果TheOtherClass是在不同的命名空間,訪問如{Namespace}{ClassName}{Static Method Name}。但是您應該確保其他班級與Namespace中的的當前示例中找到的相同。