Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > โปรแกรมขึ้น Error คือ index was outside the bounds of the array ทั้งๆที่ เป็น syntex แบบไม่ซ้ำซ้อนเลย ลองดู code



 

โปรแกรมขึ้น Error คือ index was outside the bounds of the array ทั้งๆที่ เป็น syntex แบบไม่ซ้ำซ้อนเลย ลองดู code

 



Topic : 099267



โพสกระทู้ ( 63 )
บทความ ( 0 )



สถานะออฟไลน์




เป็นโปรแกรมที่ query ค่าจากฐานข้อมูล แล้วมาเก็บใน array ซึ่งแสดงผลปกติน่ะ ่ะ แต่จะมีค่า index was outside the bounds of the array ตลอดทุกครั้งเลย ไม่รู้สาเหตุมาจากอะไร

ขออีกคำถามนะ ขอแนวตัวอย่างการเช็คค่าซ้ำหน่อย เช่น ผม query จากฐานข้อมูลเป็นตัวเลข 0,1,0,1 แล้วมาเก็บใน array แล้วจะเช็คค่าว่าซ้ำมั้ย เช่น 1,1,1,1 ซ้ำ ประมาณนี้

Code (C#)
   MessageBox.Show("Rows.Count= " + dt.Rows.Count);  // ผลคือเลข 4
            if (dt.Rows.Count > 0)
            {
                    int[] num = new int[dt.Rows.Count];
                    int i, j;
                    string result = "";
                    for (i = 0; i < dt.Rows.Count; i++)
                    {
                        int valRepeat = Int32.Parse(dt.Rows[i]["repdur_status"].ToString());
                        //MessageBox.Show(valRepeat);
                        num[i] = valRepeat;
                    }

                    for (j = 0; j < dt.Rows.Count;j++)
                    {
                        result += "num[" + j + "]= " + num[j] + "\n";
                        //MessageBox.Show("รอบที่:J=" + (j) + "=>" + num[j].ToString());                        
                    }
                    MessageBox.Show(result);
             }




Tag : .NET, Win (Windows App), C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-08-18 23:19:28 By : Takashi_7 View : 10406 Reply : 19
 

 

No. 1



โพสกระทู้ ( 177 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


โหลด TeamViewer มาลงครับ
แล้ว PM ID+PASS มาจะช่วยดูให้ ว่างๆนอนไม่หลับ
ภายใน 00:45 น. นะครับ ไม่งั้นจะไปตีดอทละ


--- UPDATE ---

00.45 ละครับ สงสัยจะกลัว พอให้หา TeamViewer มาลง
Offline ไปเลย ไม่เป็นไรครับเข้าใจ








ประวัติการแก้ไข
2013-08-19 00:46:28
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-19 00:33:47 By : คนงานตัดอ้อย
 


 

No. 2



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

index was outside the bounds of the array

Error นี้ ส่วนใหญ่มาจาก การอ้างอิงตำแหน่ง Index ในตัวแปร Array ที่ตำแหน่งนั้นไม่มีอยู่ มันจึงเกิด Error นี้ครับ

เท่าที่ดู ๆ ในโค้ดก็ไม่มีอะไรน่าจะทำให้เกิด Error นี้ได้นะครับ งงเหมือนกัน

รอผู้รู้ท่านอื่นมาตอบครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-19 08:29:10 By : 01000010
 

 

No. 3



โพสกระทู้ ( 63 )
บทความ ( 0 )



สถานะออฟไลน์


มาอัพเดท...ครับ วันนี้...ผมลองรันงานที่ทำงาน winXP32bit, VS2010 ปรากฏว่าปกติ ไม่ขึ้น index was outside the bounds of the array

แต่เนื่องจากเมื่อคืนผมไปลองรันที่บ้าน win8 64bit, VS2010 ขึ้นอย่างเดียวเลย

เดี๋ยวจะลองไปรันที่บ้านอีกที....

แต่ตอนนี้...รันปกติแล้ว...

ใครมี fn array เกี่ยวกับการหาค่าซ้ำกับมั้ย เช่น ผม query จากฐานข้อมูลเป็นตัวเลข 0,1,0,1 แล้วมาเก็บใน array แล้วจะเช็คค่าว่าซ้ำมั้ย เช่น 1,1,1,1 ซ้ำ ประมาณนี้

หรือแนวภาษาซีก็ได้


....ขอบคุณล่วงหน้าครับ....
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-19 09:15:37 By : Takashi_7
 


 

No. 4



โพสกระทู้ ( 45 )
บทความ ( 1 )



สถานะออฟไลน์


กรณีนี้ ผมแนะนำให้ใช้พวก List จะดีกว่านะครับ
เนื่องจากว่ามันจะยืดหยุ่นได้ดีกว่าที่เราใช้ Array และไม่ต้องกำหนดขนาดด้วยครับ
Code (C#)
List<int> numbers = new List<int>();
numbers.add(10); // index 0, value = 10;
numbers.add(20); // index 1, value = 20;
numbers.add(30); // index 2, value = 30;

//Print
MessageBox.Show(number[0].ToString());
MessageBox.Show(number[1].ToString());
MessageBox.Show(number[2].ToString());

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-19 10:26:03 By : batiboy
 


 

No. 5



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 3 เขียนโดย : Takashi_7 เมื่อวันที่ 2013-08-19 09:15:37
รายละเอียดของการตอบ ::
ลอง Linq ดูครับ ใช้เช็คค่าซ้ำใน Array / List หรือพวก Collection ครับ

ตัวอย่าง

Code (C#)
int[] listOfItems = new[] { 4, 2, 3, 1, 6, 4, 3 };
var duplicates = listOfItems
    .GroupBy(i => i)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);
foreach (var d in duplicates)
     MessageBox.Show(d.ToString());
//Out put : 4 , 3





ประวัติการแก้ไข
2013-08-19 14:40:59
2013-08-19 14:42:03
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-19 14:40:10 By : 01000010
 


 

No. 6



โพสกระทู้ ( 63 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : batiboy เมื่อวันที่ 2013-08-19 10:26:03
รายละเอียดของการตอบ ::
ขอบคุณน่ะครับสำหรับคำแนะนำ.....





ตอบความคิดเห็นที่ : 5 เขียนโดย : 01000010 เมื่อวันที่ 2013-08-19 14:40:10
รายละเอียดของการตอบ ::
ขอบคุณน่ะครับสำหรับคำแนะนำ.....

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-19 15:20:57 By : Takashi_7
 


 

No. 7



โพสกระทู้ ( 63 )
บทความ ( 0 )



สถานะออฟไลน์


var duplicates = n.GroupBy(k => k).Where(g => g.Count() > 1).Select(g => g.Key); <===== Error บรรทัดนี้ ผมไม่เข้าใจว่า LINQ วนลูป for ยังไง ที่ผมลองใส่คือ n.GroupBy หรือ num[j].GroupBy Error ทั้งคู่

Code (C#)
                    int[] num = new int[dt.Rows.Count];
                    int i, j;
                    string result = "";
                    for (i = 0; i < dt.Rows.Count; i++)
                    {
                        int valRepeat = Int32.Parse(dt.Rows[i]["repdur_status"].ToString());   //query จากฐาน
                        num[i] = valRepeat;  //เก็บไว้ Array
                    }
                    
                    for (j = 0; j < dt.Rows.Count; j++)
                    {
                        //MessageBox.Show("รอบที่:J=" + (j) + "=>" + num[j].ToString());
                        //result += "num[" + j + "]= " + num[j] + "\n";
                        int n = 0;
                        n += num[j];
                        MessageBox.Show(n.ToString());   //ผล คือ 0 และ 1

                        var duplicates = n.GroupBy(k => k).Where(g => g.Count() > 1).Select(g => g.Key);   <===== Error บรรทัดนี้  ผมไม่เข้าใจว่า LINQ  วนลูป for  ยังไง ที่ผมลองใส่คือ  n.GroupBy  หรือ num[j].GroupBy   Error ทั้งคู่

                        foreach (var d in duplicates)
                        MessageBox.Show(d.ToString());
                    }



ประวัติการแก้ไข
2013-08-19 16:51:11
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-19 16:47:11 By : Takashi_7
 


 

No. 8



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 7 เขียนโดย : Takashi_7 เมื่อวันที่ 2013-08-19 16:47:11
รายละเอียดของการตอบ ::
ลองไล่โค้ดดูดีๆครับ n ไม่ใช่ Collection

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-20 09:20:52 By : 01000010
 


 

No. 9



โพสกระทู้ ( 63 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 8 เขียนโดย : 01000010 เมื่อวันที่ 2013-08-20 09:20:52
รายละเอียดของการตอบ ::
ลองไล่โค้ดใหม่แล้ว....ยังไม่ได้อยู่ดี...รบช่วยดูโค้ดให้หน่อย..ว่า ผิด syntex หรือป่าว compile แล้ว ไม่ Error



Code (C#)
List<int> num = new List<int>();
                    int i;
                    //int min=0;
                    for (i = 0; i < dt.Rows.Count; i++)
                    {
                        int valRepeat = Int32.Parse(dt.Rows[i]["repdur_status"].ToString());
                        //MessageBox.Show(valRepeat);
                        num.Add(valRepeat);   //รับ  0  กับ  1
                        //MessageBox.Show("int i=["+(i)+"]=" +num[i].ToString());
                    }
                    List<int> NewNum = new List<int>();
                    int j;
                    for (j = 0; j < dt.Rows.Count; j++)
                    {
                       MessageBox.Show("แสดงรอบที่:J=" + (j) + "=>"+num[j].ToString());   //แสดง   0  กับ  1
                       NewNum.Add(num[j]);
                       var duplicates = NewNum
                            .GroupBy(x => x)
                            .Where(g => g.Count() > 1)
                            .Select(g => g.Key);
                       foreach (var d in duplicates)
                           MessageBox.Show("d แสดงค่าซ้ำ รอบที่:J=" + (j) + "=>" + d.ToString());   //บรรทัดนี้ ไม่ขึ้น  
                    }



ประวัติการแก้ไข
2013-08-20 15:19:41
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-20 15:19:10 By : Takashi_7
 


 

No. 10



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 9 เขียนโดย : Takashi_7 เมื่อวันที่ 2013-08-20 15:19:10
รายละเอียดของการตอบ ::
เดียวเย็น ๆ ค่ำ ๆ ผมกลับจากทำงาน จะทำให้ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-20 16:26:24 By : 01000010
 


 

No. 11



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 9 เขียนโดย : Takashi_7 เมื่อวันที่ 2013-08-20 15:19:10
รายละเอียดของการตอบ ::
Code (C#)
            List<int> num = new List<int>();
            
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                int valRepeat = Int32.Parse(dt.Rows[i]["repdur_status"].ToString());
                num.Add(valRepeat); 
            }
            var duplicates = num
                .GroupBy(i => i)
                .Where(g => g.Count() > 1)
                .Select(g => g.Key);
            foreach (var d in duplicates)
                MessageBox.Show(d.ToString());



ลองนำไป Debug ศึกษาการทำงานดูครับ แนะนำให้ Debug ด้วย F11 ตอน Foreach นะครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-20 21:28:14 By : 01000010
 


 

No. 12

Guest


Quote:
MessageBox.Show("Rows.Count= " + dt.Rows.Count); // ผลคือเลข 4
if (dt.Rows.Count > 0)
{
int[] num = new int[dt.Rows.Count];
int i, j;
string result = "";
for (i = 0; i < dt.Rows.Count; i++)
{
int valRepeat = Int32.Parse(dt.Rows[i]["repdur_status"].ToString());
//MessageBox.Show(valRepeat);
num[i] = valRepeat;
}

for (j = 0; j < dt.Rows.Count;j++)
{
result += "num[" + j + "]= " + num[j] + "\n";
//MessageBox.Show("รอบที่:J=" + (j) + "=>" + num[j].ToString());
}
MessageBox.Show(result);
}



หัวข้อกระทู้นี้ (SourceCode ด้านบน) มันต้องมาวิเคราะห์ดูว่า มันมีข้อผิดพลาดตรงไหน?

#NO 1 - #NO 11 มันปลายเหตุ
ต่อให้ได้คำตอบที่พึงพอใจ มันก็เท่านั้น
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 09:43:34 By : ผ่านมา
 


 

No. 13



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 12 เขียนโดย : ผ่านมา เมื่อวันที่ 2013-08-21 09:43:34
รายละเอียดของการตอบ ::
พึ่งสังเกตุว่าสั่งน้ำแป๊ปซี่ แล้วได้โค้ดซะงั้น

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 11:39:48 By : 01000010
 


 

No. 14



โพสกระทู้ ( 63 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 11 เขียนโดย : 01000010 เมื่อวันที่ 2013-08-20 21:28:14
รายละเอียดของการตอบ ::
...ได้แล้วน่ะครับ...ขอบคุณน่ะครับ ท่าน 0100 0010 ไม่รู้จะเรียกชื่อว่าไงดี อิอิอิ
ว่าแต่ถ้าจะถามอีกสักคำถาม ถ้าจะนับจำนวนค่าที่ซ้ำ ต้อง ตั้งเงื่อนไขยังไง ของ LINQ
หรือพอจะมีเว็บศึกษา ที่เป็นคำอธิบายสำหรับผู้เริ่มต้น LINQ มั้ย...



ตามโค้ดนี้เลย
Code (C#)
List<int> num = new List<int>();

for (int i = 0; i < dt.Rows.Count; i++)
{
    int valRepeat = Int32.Parse(dt.Rows[i]["repdur_status"].ToString());
    num.Add(valRepeat); 
}
var duplicates = num
    .GroupBy(i => i)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);
foreach (var d in duplicates)
    MessageBox.Show(d.ToString());


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 11:59:06 By : Takashi_7
 


 

No. 15

Guest


Code (C#)
var dupCount = from d in dt.AsEnumerable()
   group d by d.Field<int>("repdur_status") into g
   select new
   {
      Key = g.Key,
      Count = g.Count()
   };

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 14:21:36 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 16



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 14 เขียนโดย : Takashi_7 เมื่อวันที่ 2013-08-21 11:59:06
รายละเอียดของการตอบ ::
ผมชื่อ เบ็นครับ (Ben) 0100 0010 = เลขฐานสิบได้ 66 = ในภาษา ascii ได้ตัวอักษร B คือตัวย่อชื่อผม Ben ครับ

ส่วนที่ถามเพิ่มเติม ทำได้หลายแบบครับ แต่ตอนนี้ยังไม่สะดวกตอบ ไว้เย็น ๆ ค่ำ ๆ เช่นเคยครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 14:28:50 By : 01000010
 


 

No. 17



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 14 เขียนโดย : Takashi_7 เมื่อวันที่ 2013-08-21 11:59:06
รายละเอียดของการตอบ ::
คำตอบอยู่ที่คุณ "ห้ามตอบเกินวันละ 2 กระทู้" ครับ

อธิบายเพิ่มเติม ผลลัพท์ของคำตอบนี้คือ Anonymous Type

ได้ (ฟิล Key ค่าของสมาชิกตัวนั้น ๆ) และ (ฟิล Count จำนวนนับของสมาชิกตัวนั้น ๆ)

สรุป ผลลัพท์จะได้ค่าจำนวนนับของสมาชิกใน List แต่ละตัวครับ

ซึ่งถ้าอยากรู้ว่าใน List มีสมาชิกที่ซ้ำทั้งหมดกี่ตัว ต้องทำอีกแบบครับ



ประวัติการแก้ไข
2013-08-21 14:38:20
2013-08-21 14:38:59
2013-08-21 14:39:12
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 14:37:58 By : 01000010
 


 

No. 18

Guest


ตอบความคิดเห็นที่ : 16 เขียนโดย : 01000010 เมื่อวันที่ 2013-08-21 14:28:50
รายละเอียดของการตอบ ::
ดีนะที่ไม่ได้ใช้ unicode ไม่งั้นต้องเขียนถึง 16 bit

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 14:39:47 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 19



โพสกระทู้ ( 697 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 18 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2013-08-21 14:39:47
รายละเอียดของการตอบ ::
ยาวไป ไม่เท่ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-08-21 14:41:19 By : 01000010
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : โปรแกรมขึ้น Error คือ index was outside the bounds of the array ทั้งๆที่ เป็น syntex แบบไม่ซ้ำซ้อนเลย ลองดู code
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 01
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่