2014-09-03 4 views
-3

В настоящее время разрабатывается приложение, которое будет рассчитывать на продажу продажи за 4 месяца с первоначальной продажей. Ожидается, что продажи вырастут на 5% каждый месяц через 4 месяца. Функция ProduceSalesProjectionTable, похоже, дает мне ошибку, и я не знаю, почему она не может понять ее.Array за пределами? Зачем?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace itse 
{ 
    class TempAgency 
    { 
     static string[] salesman1 = new string[4]; 
     static double[,] sales1 = new double[4, 5]; 
     static void DisplayInstructions() 
     { 
      Console.WriteLine("You will be asked to enter data for four salesmen."); 
      Console.WriteLine("For their name, enter their first name followed"); 
      Console.WriteLine("by a space and then their las name."); 
      Console.WriteLine(""); 
      Console.WriteLine("For testing purposes enter data for four <4> salesmen."); 
      Console.WriteLine(""); 
      Console.WriteLine(""); 
     } 

     static void GetSalesData(string[] salesman, double[,] sales) 
     { 
     for (int x = 0; x < 4; x++) 
      { 
       Console.WriteLine("Enter name: "); 
       salesman[x] = Console.ReadLine(); 
       string [] split = salesman[x].Split(new Char [] {' '}); 
       Console.WriteLine(split[0]+"'s Sales goal: "); 
       sales[x,0]=Convert.ToDouble(Console.ReadLine()); 
      } 
     } 
     static void ProduceSalesProjectionTable(double[,] sales) 
     { 
      for (int i = 0; i < 4; i++) 
      { 
       double salesPercentage = 0.05; 
       for (int j = 0; j < 4; i++) 
       { 

        sales[i, j + 1] = sales[i, 0] + (sales[i, 0] * salesPercentage);   //here lies the problem 
        salesPercentage += 0.05; 
       } 
      } 



     } 
     static void DisplaySalesProjections() 
     { 

     } 

     public static void Main(String[] args) 
     { 

      DisplayInstructions(); 
      GetSalesData(salesman1, sales1); 
      //Console.WriteLine("salesman: " + salesman[0]); 
      //Console.WriteLine("sales: " + sales[0, 0]); 
      ProduceSalesProjectionTable(sales1); 
      //for (int i = 0; i < 4; i++) 
      //{ 
      // //double salesPercentage = 0.05; 
      // for (int j = 0; j < 4; i++) 
      // { 
      //  Console.WriteLine("salesman: " + salesman[i] + "\tsales: " + sales[i, j]); 
      // } 
      //} 
      //Console.WriteLine("sales:" + sales[0, 1]); 
      //Console.WriteLine("sales:" + sales[1, 1]); 
      //Console.WriteLine("sales:" + sales[2, 1]); 
      //Console.WriteLine("sales:" + sales[3, 1]); 
      for (int i = 0; i < 4; i++) 
      { 
       //double salesPercentage = 0.05; 
       for (int j = 0; j < 4; i++) 
       { 
        Console.WriteLine("salesman: " + salesman1[i] + "\tsales: " +  sales1[i, 0]); 
       } 
      } 
      Console.ReadLine(); 
     } 
    } 
} 
+9

'for (int j = 0; j <4; i ++)' скорее всего проблема и опечатка. – Dirk

+0

Ну, вы должны начать с изучения линии, которая выдает исключение! Но вы проверяете длину массива 'split'? Возможно, он пуст? – crashmstr

+1

И как еще одно примечание, вы, вероятно, не должны использовать произвольно фиксированную длину для i или j в состоянии «для» остановки. Почему бы не использовать длину массива? – NaeiKinDus

ответ

0

Посмотрите внимательно на линии

for (int j = 0; j < 4; i++) 

Ваш индексатор J но вы увеличиваете я вместо у.

В конечном счете sales[i, j + 1] оценивает по методу sales[4, 1], что является за пределами границ. не

Решение: изменить код

for (int j = 0; j < 4; j++) 

(Вы сделали это в 2-х местах)

+0

глупый ошибка у меня. Спасибо, сэр. –

0

Если вы строите ваш обмен на петлях, как это, должно быть не «из связанной ошибки» :

static void ProduceSalesProjectionTable(double[,] sales) 
    { 
     for (int i = 0; i < sales1.GetLength(0); i++) 
     {    
      for (int j = 0; j < sales1.GetLength(1); i++) 
      { 
       ...Do Stuff... 
      } 
     } 
    } 

При использовании 2-мерных массивов GetLength (0) дает вам длину первого измерения вашего 2-мерного массива и GetLength (1) дает вам длину второго измерения.

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