2014-02-21 56 views
1

在我問我的問題之前,我閱讀了以前的帖子。當我運行該腳本時,在以下代碼中顯示Invalid rank specifier:expected ',' or ']'錯誤。順便說一句,我試過new float[8939, 100];但它仍然顯示錯誤。 而且還可以如何使用散列表來保存我寫散列表註釋的結果。無效的等級說明符:預期的','或']'錯誤

namespace function 
{ 
    public partial class Form1 : Form 
    { 

      float userscore,itemscore,result; 
      string lineitem, lineuser; 
      float[][] a = new float[89395][100];   //<----the error is here 
      float[][] b = new float[1143600][100];  //<----the error is here 
      //float[,] c = new float[89395, 100]; 
      StreamReader fileitem = new StreamReader("c:\\1.txt"); 
      StreamReader fileuser = new StreamReader("c:\\2.txt"); 
     public Form1() 
     { 
      InitializeComponent(); 

      for (int x = 0; x <= 8939500; x++) 
      { 
       lineuser = fileuser.ReadLine(); 
       string[] values = lineuser.Split(' '); 
       int userid, factoriduser; 
       foreach (string value in values) 
       { 
        userid = Convert.ToInt32(values[0]); 
        factoriduser = Convert.ToInt32(values[1]); 
        userscore = Convert.ToSingle(values[2]); 
        a[userid][factoriduser] = userscore; 
       } 
      } 

      for (int y = 0; y <= 114360000; y++) 
      { 
       lineitem = fileitem.ReadLine(); 
       string[] valuesi = lineitem.Split(' '); 
       int itemid, factoriditem; 
       foreach (string value in valuesi) 
       { 
        itemid = Convert.ToInt32(valuesi[0]); 
        factoriditem = Convert.ToInt32(valuesi[1]); 
        itemscore = Convert.ToSingle(valuesi[2]); 
        b[itemid][factoriditem] = itemscore; 
       } 

      } 

     } 
     public float dotproduct(int userid,int itemid) 
     { 

      //get the score of 100 from user and item to dotproduct 
      float[] u_f = a[userid]; 
      float[] i_f = b[itemid]; 

      for (int i = 0; i <u_f.GetLength(1); i++) 
      { 
       result += u_f[userid] * i_f[itemid]; 
      } 
      return result; 

     } 

     private void btn_recomm_Click(object sender, EventArgs e) 
     { 
      if(txtbx_id.Text==null) 
      { 
       MessageBox.Show("please insert user id"); 
      } 
     if (txtbx_id.Text != null) 
      { 
      int sc = Convert.ToInt32(txtbx_id.Text); 
      if (sc>=0 &&sc<=89395) 
      { 
       for (int z=0;z<=1143600;z++) 
       { 
        dotproduct(sc,z); 
       } 
       //Hashtable hashtable = new Hashtable(); 
       //put the result in hashtable 
       //foreach (DictionaryEntry entry in hashtable) 
       //{ 
        //Console.WriteLine("{0}, {1}", entry.Key, entry.Value); 
       // } 
      } 
     } 
      if (txtbx_id==null &&txtbx_itemid==null) 
      { 
       int uid = Convert.ToInt32(txtbx_id.Text); 
       int iid = Convert.ToInt32(txtbx_itemid.Text); 
       { 
        if (uid>=0 && uid<=89395 && iid>=0 && iid<=1143600) 
        { 
         dotproduct(uid,iid); 
         MessageBox.Show("The Score of user id "+uid+" is "+result); 
        } 
       } 
      } 
     } 
+0

不是它'浮[,] A =新的浮動[X,Y]' - http://msdn.microsoft.com/en-我/庫/ 2yd9wwz4.aspx – tymeJV

回答

1

你不能像這樣做一個新的二維數組 - 你一次只做一個維度。可以useva環路初始化第二dimensiuon,或使用LINQ:

float[][] a = Enumerable.Range(0, 89395).Select(i=>new float[100]).ToArray(); 
4

您不能像這樣申報jagged array。你必須先聲明外陣列,然後宣佈所有內部數組:

float[][] a = new float[89395][]; 
for(int i = 0; i < 89395; i++) 
    a[i] = new float[100]; 

,或者你應該將陣列更改多維float[,]數組:

float[,] a = new float[89395,100]; 
+0

如果我想使用以下格式float [,] .....我應該怎麼做@marcinjuraszek – user3328039

+0

它不需要內部數組有不同的維度(這就是鋸齒狀數組)你應該用'[,]'去,因爲它更容易管理(並且如你所見,初始化)。 – MarcinJuraszek

3
float[,] a = new float[89395,100]; 
float[,] b = new float[1143600,100]; 

參考:http://msdn.microsoft.com/en-us/library/2yd9wwz4.aspx

+0

我之前使用過它,但它顯示我「在側面[]的錯誤數目的指數,期望'2'」在行------ float [] u_f = a [userid]; – user3328039

+0

您還必須修改其他代碼才能使用多維數組。 – Andy

相關問題