2012-03-22 41 views
-1
using (read = new StreamReader("C:/Users/Sam Smith/Desktop/convert.txt")) 
      { 
       while (!read.EndOfStream) 
       { 
        lineFromFile = read.ReadLine(); 
        units = lineFromFile.Split(','); 

        if (units.Contains(splitEntry[0]) && units.Contains(splitEntry[1])) 
        { 
         firstUnit = units[0]; 
         secondUnit = units[1]; 
         userConvertValue = Convert.ToDouble(splitEntry[2]); 
         fileConvertValue = Convert.ToDouble(units[2]); 
         result = fileConvertValue * userConvertValue; 
        } 
        if (units.Contains(splitEntry[0]) && units.Contains(splitEntry[1])) 
        { 
         firstUnit = units[1]; 
         secondUnit = units[0]; 
         userConvertValue = Convert.ToDouble(splitEntry[2]); 
         fileConvertValue = Convert.ToDouble(units[2]); 
         result = userConvertValue/fileConvertValue; 
        } 
        if (!units.Contains(splitEntry[0]) || !units.Contains(splitEntry[1])) 
        { 
         Console.WriteLine("Error, measurement unit not recognised."); 
        } 

以上我有一個包含類型單元測量(磅,盎司,英里,這樣)的文本文件,從該文件中的文本被分成一個字符串數組。 用戶輸入以下格式的兩個測量單位,以轉換爲兩個單位: 單位,單位,金額 在文本文件中,兩個單位的換算金額爲每三個拆分字符串,如下所示: 單位,單位,2.80 單位,單位,1.27(等)陣列和測量單位轉換

有沒有將每組單位及其換算金額分組的方法?例如,如果用戶試圖轉換兩個特定單位,那麼程序知道在計算最終結果時使用哪個轉換值。 可能有點模糊,但很難解釋。 編輯:用戶不與文件進行交互,程序只是從文件中提取數據,然後將其分割爲字符串(',')並存儲在數組中。

+0

-1:不幸的是它非常含糊,它沒有幫助有一個「文本文件」和「用戶輸入」的東西。用戶是否將文字輸入到文本文件中?你能提供一個文本文件的樣本,爲什麼用戶輸入這些值,然後告訴我們程序應該怎樣處理這些數據。 – 2012-03-22 17:04:54

+0

splitEntry數組的用途是什麼?我認爲它是在這段代碼之外聲明的。 – 2012-03-22 17:08:39

+0

'splitEntry'的目的是將用戶的輸入分割成一個數組。然後使用.contains()對照'units'數組的值檢查該數組的值。 – 2012-03-22 17:10:48

回答

0

如果我沒有得到你錯了,下面的代碼應滿足您的要求(這是非常基本的,沒有錯誤處理等):

public enum Unit 
{ 
    Pound, 
    Kilo, 
    Kilometer, 
    Mile 
} 

public class UnitMapping 
{ 

    public UnitMapping(Unit source, Unit target, double factor) 
    { 
    SourceUnit = source; 
    TargetUnit = target; 
    Factor = factor; 
    } 

    public Unit SourceUnit { get; private set; } 

    public Unit TargetUnit { get; private set; } 

    public double Factor { get; private set; } 

} 

public class UnitCalculator 
{ 
    public const string FILE_INPUT = @"Kilo,Pound,0.45359237 
            Kilometer,Mile,1.609344"; 


    private List<UnitMapping> mappings; 

    public UnitCalculator() 
    { 
    this.mappings = new List<UnitMapping>(); 

    // parse the mappings 
    foreach (var line in FILE_INPUT.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) 
    { 
     var fields = line.Split(','); 

     var source = (Unit)Enum.Parse(typeof(Unit), fields[0]); 
     var target = (Unit)Enum.Parse(typeof(Unit), fields[1]); 
     double factor = double.Parse(fields[2], CultureInfo.InvariantCulture); 

     this.mappings.Add(new UnitMapping(source, target, factor)); 
    } 
    } 

    public double Convert(Unit source, Unit target, double value) 
    { 
    foreach (var mapping in this.mappings) 
    { 
     if (mapping.SourceUnit == source && mapping.TargetUnit == target) 
     { 
     return value * mapping.Factor; 
     } 
     else if (mapping.SourceUnit == target && mapping.TargetUnit == source) 
     { 
     return value * (1/mapping.Factor); 
     } 
    } 

    throw new InvalidOperationException("No mapping could be found for this conversion."); 
    } 

} 

調用它像這樣:

static void Main(string[] args) 
{ 
    var calc = new UnitCalculator(); 
    Console.WriteLine(calc.Convert(Unit.Mile, Unit.Kilometer, 1)); 
} 

如果你不知道單位,你也可以使用字符串。