2010-11-13 24 views
0

我已經在下面包含了我的源代碼草稿。我將不勝感激任何意見。我不確定我的語法是否正確...另外,我確實在Cramster上找到了一個例子;但我不確定該示例是否按照指示實施了「下標」(請在指示錯誤的情況下指出)。我也認爲「for」循環是相當重複的,因爲它似乎建立了下標應該建立的相同的事情......該代碼是對以下作業的響應:有關循環,數組,下標和IndexOutOfRangeException的Try塊中的C#錯誤

「Write a program in它聲明一個由5個整數組成的數組,並在 中存儲5個數值。編寫一個try塊,在其中放置一個循環,嘗試訪問數組中的每個 元素,將下標從0遞增到10.創建一個catch塊 捕獲了最終的IndexOutOfRangeException;在該塊內,在屏幕上顯示「Now you've too far。」,將該文件保存爲GoTooFar.cs。「

微軟的Visual C#®2008年,面向對象的編程介紹,3E,喬伊斯·法雷爾

我的源代碼有錯誤:

using System; 

namespace Further 

{ 
    public class GoTooFar 
    { 
     public static void Main() 
     { 
     private static int[] fiveIntArray = {1, 2, 3, 4, 5}; 
     //private static int CUTOFF = 11;  

     int subscript; 
     int rate; 


     try 
     { 
      //bool further; 
      //public static int DetermineArray(int further) 
      for(int x = 0; x < 10; x++) 
      if(further < 11) 
       throw new IndexOutofRangeException("Now you've gone too far."); 
       subscript = 0; 
      else 
       subscript = 10; 
      rate = fiveIntArray[subscript]; 
      return rate; 
     } 

     catch(IndexOutOfRangeException e) 
     { 
      throw; 
      Console.WriteLine(e.StackTrace); 
      //Console.WriteLine("Now you've gone too far."); 
      //return e; 
     } 
     } 
    } 
}          

//的我發現了例如Cramster.com :

using System; 
namespace Console2 
{ 
    class Class1 
    { 
     static void Main(string[] args) 
     { 
     int[] numbers = new int[5] {1, 2, 3, 4, 5}; 

     try 
     { 
      for(int i=0;i<10;i++) 
      if(i>5) 
       throw new IndexOutOfRangeException("Now you’ve gone too far."); 
     } 

     catch(IndexOutOfRangeException e) 
     { 
      throw; 
     } 

     }//end ma... 
    } 
} 

回答

1

你不應該拋出一個異常,只是捕捉運行時拋出的異常。還有其他幾個問題:

  1. 您正在方法中聲明一個字段。只需放下private static
  2. 只有if/else在for循環中,但您明確打算訪問也是如此。我更喜歡總是使用花括號,但這是主觀的。
  3. 你顯然打算返回每一次迭代,這是沒有意義的。

它可以是簡單:

public static void Main() 
{ 
    int[] fiveIntArray = {1, 2, 3, 4, 5}; 
    try 
    { 
     for(int x = 0; x < 10; x++) 
     { 
      int rate = fiveIntArray[x]; 
     } 
    } 
    catch(IndexOutOfRangeException e) 
    { 
     Console.WriteLine("Now you've gone too far."); 
    }  
} 

注意,我們實際上並不使用rate。它就在那裏,所以這將是一個有效的聲明。

+0

非常感謝您的幫助。我真的很感激你花時間指出我代碼中可怕的缺陷(而不是僅僅向我展示它應該如何完成)。因爲你花時間做這件事,我從你的評論中學到了很多東西。我必須說,這種建設性的批評對我學習如何編程比幫助我更有幫助,而不僅僅是看到一個真正有效的特定源代碼,因爲它向我展示了我犯的重大錯誤。也就是說,我喜歡你的源代碼比在cramster上的更好。少即是多... :-) – Nooob 2010-11-13 17:01:27