2015-08-29 2 views
-2

У меня возникла следующая проблема: я не могу понять, как сравнить два массива и показать разницу между ними или показать, что это галстук. Пожалуйста, помогите с этим упражнением. Код, который у меня есть, не позволяет мне найти разницу в каждом автомобиле. Я не уверен, что мне делать.Как сравнить число в одном массиве с числом в другом массиве и найти разницу? im using C#

В каждой команде под названием Chevy и Ford есть восемь автомобилей. Один автомобиль из каждой команды расправляет своего противника на полосу перетаскивания. Читайте в гоночных временах для восьми автомобилей Chevy, а затем читайте во времена восьми автомобилей Ford. Храните время в массивах под названием Chevy [] и Ford []. Затем укажите победителя каждой пары, указав количество секунд, в которые победил победитель. В конце объявить, какая команда выиграла, на основе которой команда имела наибольшее количество побед. Ниже приведен пример матча.

Введите время для автомобилей Chevy: 5,4 7,2 4,0 9,1 5,8 3,9 6,2 8,1 Введите время для соответствующих автомобилей Ford: 5,8 6,9 3,9 9,2 5,8 3,8 6,0 8,5 И победители: Chevy на 0,4 сек Ford на 0,3 сек. Ford на 0,1 сек. Chevy на 0,1 сек. Tie! Форд на 0,1 сек. Ford на 0.2 сек. Chevy на 0,4 сек. И команда победителей: F O R D!

• Примите гоночные времена для каждого из автомобилей Chevy в массив Chevy [].
• Примите гоночные времена для каждого из автомобилей Ford в массив Ford [].
• Затем объявите автомобиль для каждой гонки, давая выигрышное время в секундах. • Если время идентично, объявите, что гонка была галстуком. • Наконец, объявите, какая команда выиграла матч, предполагая, что связь возможна.

и вот мой код

{ 

     //declare varibles 
     double[] chevy = new double[8]; 
     double[] ford = new double[8]; 
     int x, y; 
     double ctotal = 0, chevyaverage = 0; 
     double ftotal = 0, fordaverage = 0; 
     double cwin= 0, fwin = 0; 
     //calculations 

     //input 
     for (x = 0; x < 8; x++) 
     { 
      Console.Write("Enter time for chevy car " + (x + 1) + ":"); 
      chevy[x] = double.Parse(Console.ReadLine()); 
     } 
     for (y = 0; y < 8; y++) 
     { 
      Console.Write("Enter time for ford car " + (y + 1) + ":"); 
      ford[y] = double.Parse(Console.ReadLine()); 
     } 
         //this is not working, it keeps coming up as 1 
     if (chevy[x] < ford[y]) 
     { 
      cwin = chevy[x] - ford[y]; 
      Console.WriteLine("Chevy won by: " + cwin); 
     } 
     else if (ford[y] < chevy[x]) 
     { 
      fwin = ford[y] - chevy[x]; 
      Console.WriteLine("Ford won by: " + fwin); 
     } 
     else 
     { 
      Console.WriteLine("Tie!"); 
     } 

     //output 


     Console.ReadLine(); 

    } 
} 

ответ

1

Хорошо, первая часть будет собирать данные, которые будут работать для упражнения.

Что вам нужно для tweek является логикой, чтобы найти победителя. Я начну после того, как вы соберете время для каждой из команд.

То, что я хотел бы предложить, чтобы сделать это:

  1. Итерация от 0..n-1 (N = 8, который является длина массива) (я не видел, что цикл в коде, я надеюсь, Я не хватает его)
  2. в то время как итерация сделать сравнение следующим образом:

    int chevyWins = 0, fordWins = 0; 
    for (int i = 0; i < 8; i++) 
    { 
        if (chevy[i] < ford[i]) 
        { 
         //Note the difference with your code, your are doing 
         //the subtraction chevy[i] - ford[i] that will give you negative numbers. 
         chevyWins++; 
         Console.WriteLine(String.Format("Chevy won by {0}", (ford[i] - chevy[i]))); 
        } 
        else if (chevy[i] > ford[i]) 
        { 
         fordWins++; 
         Console.WriteLine(String.Format("Ford won by {0}", (chevy[i] - ford[i]))); 
        } 
        else 
        { 
         Console.WriteLine("Tie!"); 
        } 
    } 
    
    if (chevyWins > fordWins) 
    { 
        Console.WriteLine("Chevy Wins the competition!"); 
    } 
    else if (chevyWins < fordWins) 
    { 
        Console.WriteLine("Ford Wins the competition!"); 
    } 
    else 
    { 
        Console.WriteLine("The competition was tie!"); 
    } 
    

    Я думаю, что проблема с вашим кодом, что вы не итерация для сравнения каждого из сценариев. И второе - это то, как вы вычисляли разницу между каждым соревнованием.

Here является скрипкой.

Я надеюсь, что это сработает для вас! С уважением.

+0

ладно, так что же делает string.format? мы еще ничего не узнали об этом. –

+0

Из документации: «Преобразует значение объектов в строки на основе указанных форматов и вставляет их в другую строку». В принципе, вы можете конкатенировать строки. Вы можете заменить его, используя «Chevy won by» + (ford [i] -chevy [i]); и даст вам тот же результат. –

+0

Я вижу две вещи, которые я сделал не так, сначала я помещал x и y для массивов, когда я должен был положить i, и, как вы сказали, это было с тем, как я вычислял разницу между ними. Благодарю. Это помогло мне узнать еще кое-что, –

0

Попробуйте это, Вы уже написали для основной части вопроса, и вы добавляете переменные сп и п подсчета выигрыша автомобилей компаний и сравнить их Atlast

{ 

    //declare varibles 
    double[] chevy = new double[8]; 
    double[] ford = new double[8]; 
    int x, y; 
    double ctotal = 0, chevyaverage = 0; 
    double ftotal = 0, fordaverage = 0; 
    double cwin= 0, fwin = 0; 
    //calculations 

    //input 
    for (x = 0; x < 8; x++) 
    { 
     Console.Write("Enter time for chevy car " + (x + 1) + ":"); 
     chevy[x] = double.Parse(Console.ReadLine()); 
    } 
    for (y = 0; y < 8; y++) 
    { 
     Console.Write("Enter time for ford car " + (y + 1) + ":"); 
     ford[y] = double.Parse(Console.ReadLine()); 
    } 
    int cn=0,fn=0; //count of chevy wins and ford wins 
    for(int x=0,int y=0;x<8;x++,y++) 
    { 

     if (chevy[x] < ford[y]) 
     { 
     cn++;//chevy wins soo increment this 
     cwin = chevy[x] - ford[y]; 
     Console.WriteLine("Chevy won by: " + cwin); 
     } 
     else if (ford[y] < chevy[x]) 
     { 
     fn++;// ford wins 
     fwin = ford[y] - chevy[x]; 
     Console.WriteLine("Ford won by: " + fwin); 
     } 
     else 
     { 
     Console.WriteLine("Tie!");// In tie no one wins so need not include this. 
     } 

    //output 

    for (x = 0; x < 8; x++) 
    { 
     ctotal = ctotal + chevy[x]; 
    } 
    chevyaverage = ctotal/8; 

    for (y = 0; y < 8; y++) 
    { 
     ftotal = ftotal + ford[y]; 
    } 
    fordaverage = ftotal/8; 

    if(cn>fn)//checking the number of wins for each team 
    { 
     Console.WriteLine("Chevy wins"); 
    } 
    else 
     Console.writeLine("Ford wins"); 
    Console.WriteLine("The average time in seconds for each chevy car is: " + chevyaverage); 
    Console.WriteLine("The average time in seconds for each ford car is: " + fordaverage); 

    Console.ReadLine(); 

} 
} 
+0

«Попробуйте» не является полезным объяснением проблемы. Если вы чувствуете, что скопируйте/вставьте оригинальную стену кода, пожалуйста, обязательно отметьте/прокомментируйте каждое изменение, которое вы предположительно сделали, и добавьте также отдельное текстовое объяснение. –

+0

«Попробуй это», не все плакаты написаны, Алексей. И хотя пост мог бы выиграть от конструктивной критики, я думаю, что гадость не нужна. – WDS

+0

он бросил кучу ошибок, чтобы код не работал –

0

Это делается в LinqPad, поэтому вы можете вытащить «.Dump()», но вы можете использовать .Zip, чтобы делать то, что вы пытаетесь сделать, сравнивая оба массива. Я, например, сократил код, но вы делали бы свои циклы и затем вставляли элементы в массивы. Запишите их, чтобы выполнить сравнение.

using System.Linq; 

void Main() 
{ 
    double[] chevy = { 1, 2, 1, 1 }; 
    double[] ford = { 2, 1, 1, 2 }; 

    var results = chevy.Zip(ford, (c, f) => 
    { 
     if(c < f) 
     { 
      return "Chevy Won"; 
     } 
     else if(f < c) 
     { 
      return "Ford Won"; 
     } 
     else 
     { 
      return "It was a tie"; 
     } 
    }); 

    results.Dump(); 
} 

//output 
    Chevy Won 
    Ford Won 
    It was a tie 
    Chevy Won 

 Смежные вопросы

  • Нет связанных вопросов^_^