2011-03-10 24 views
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace MvcApplication5.Controllers 
{ 
    public class HomeController : Controller 
    { 
     // 
     // GET: /Home/ 

     public ActionResult Index() 
     { 
      int row; 
      int col; 

      for (row = 1; row <= 2; row++) 
      { 
       for (col = 1; col <= 2; col++) 
       { 
        Console.Write(" the answer is " + row * col);   

       } 
      } 

      int answer = row * col; 
      return View(answer); 

     } 
    } 
} 

我想我的答案是在乘法表中。 1 * 1 = 1,1 * 2 = 2,2 * 1 = 2,2 * 2 = 4這是我想要的。但上面的代碼給了我9個答案。怎麼來的?我在這裏做錯了什麼?我需要乘法表輸出?什麼是錯的?

回答

0

因爲它是在循環後計算的,所以answer現在是最終值rowcol的乘積的結果,並忽略所有初始和中間值。你需要建立一系列的結果來顯示,並在循環中加入你目前擁有的結果Console.Write(" the answer is " + row * col);

如果您將迭代變量的範圍保留爲循環,則您的問題和解決方案將更加明顯,即刪除獨立的int row;並將循環語句修改爲for (int row = 1; row <= 2; row++)

+0

你能解釋一下你的意思嗎?「你需要建立一組結果來顯示」如何建立一組顯示? – software 2011-03-10 19:35:11

+1

@software,參見[Darin Dimitrov的簡單示例](http://stackoverflow.com/questions/5264784/i-need-multiplication-tables-output-what-is-the-wrong/5264877#5264877)。他創建了一個'List '並將每個結果添加到它'model.Add(new MyViewModel ...'。 – jball 2011-03-10 19:38:48

1

您可能想要一個IEnumerable<SomeViewModel>作爲視圖模型?其實很難說,你從你的問題想要什麼,但讓我嘗試猜測:

型號:

public MyViewModel 
{ 
    public int Col { get; set; } 
    public int Row { get; set; } 
    public int Result { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    // GET: /Home/ 
    public ActionResult Index() 
    { 
     var model = new List<MyViewModel>(); 
     for (int row = 1; row <= 2; row++) 
     for (int col = 1; col <= 2; col++) 
     { 
      model.Add(new MyViewModel 
      { 
       Row = row, 
       Col = col, 
       Result = row * col 
      }); 
     } 
     return View(model); 
    } 
} 

視圖(~/Views/Home/Index.aspx):

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.MyViewModel>>" 
%> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <% foreach (var item in Model) { %> 
     <div> 
      <span>Col: <%= item.Col %></span> 
      <span>Row: <%= item.Row %></span> 
      <span>Answer: <%= item.Result %></span> 
     </div> 
    <% } %> 
</asp:Content> 

或者如果您使用顯示模板(建議):

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.MyViewModel>>" 
%> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <%= Html.DisplayForModel() %> 
</asp:Content> 

然後內部~/Views/Home/DisplayTemplates/MyViewModel.ascx

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.MyViewModel>" 
%> 
<div> 
    <span>Col: <%= Html.DisplayFor(x => x.Col) %></span> 
    <span>Row: <%= Html.DisplayFor(x => x.Row) %></span> 
    <span>Answer: <%= Html.DisplayFor(x => x.Result) %></span> 
</div> 
+0

我聽說mvc2很簡單,但現在我感覺它會讓事情變得複雜,只是一個簡單的乘法表需要模型如果我錯了,請糾正我的錯誤 – software 2011-03-10 19:42:42

+0

@software,一旦你理解了它是如何工作的(如同所有事情一樣):MVC實際上來自模型 - 視圖 - 控制器所以這三種組件總是出現在這種類型的應用中並不奇怪。所以如果你想要ASP.NET MVC就是這樣。如果你不喜歡它,還有其他選擇:控制檯應用程序,WPF,WinForms,Silverlight,經典的ASP.NET,... – 2011-03-10 19:45:04

+1

@software,無論技術有多好,你總是需要正確的工具。 MVC是用於UI架構的優秀模式。你可以在http://martinfowler.com/eaaDev/uiArchs.html上閱讀它的正確實現。我不認爲任何人會推薦不需要任何UI的乘法表計算器的MVC模式。 – smartcaveman 2011-03-10 19:46:46

0
  1. 你的返回值是一個整數。我不知道你期望得到一張桌子。
  2. 9是該函數的正確返回值。我想你可能不瞭解你編寫的代碼是如何工作的。讓我帶你通過它:

    int row; // The variable "row" is set to the default integer value, 0 
    int col=2; // The variable "cols" is set to the default integer value, 0 
    
    for (row = 1; row <= 2; row++) 
        // set the variable row = 1. 
        // while the value of "row" is less than or equal to 2, 
        // at the end of the inner statement, increment the row variable by 1 
    { 
        for (col = 1; col <= 2; col++) 
        // set the variable col = 1. 
        // while the value of "col" is less than or equal to 2, 
        // at the end of the inner statement, increment the col variable by 1 
        { 
         Console.Write(" the answer is " + row * col);   
    
        } 
    

    }

那麼應該怎麼ROW和COL各自於本聲明的末尾等於?它們都等於3.因爲你打成了直到它們等於2(所以在最後一次迭代中它們的值都等於2)。但是,在最後一次迭代結束時,它們都增加了1,再增加一次,所以它們的值都是3.

您的返回值是什麼是行*列。使用替代。 3 * 3 = 9。你去了。

爲了獲得表格值給你的觀點,你應該遵循德米特里的建議作爲最佳實踐。如果你不明白,讓我試着用更基本的術語來解釋它。

爲了讓您的視圖顯示錶格,您的視圖需要接受與表格兼容的數據。沒有辦法將整數轉換成表格。

你想看起來像數據:

 1 2 
    1 1 2 
    2 2 4 

所以,你在最簡單​​的形式需要一個2維整數數組,像值:

tableArray[0] = new int[]{0,1,2}; 
    tableArray[1] = new int[]{1,1,2}; 
    tableArray[2] = new int[]{2,2,4}; 

因此,模型的類型您的視圖應該接受的是類似於int[][]

0

在每個循環中,使用row ++增加行。然後檢查它是否符合標準(行< = 2)。如果它不符合標準,它會打破循環。但它仍然增加。所以當行命中2時,它通過循環運行,增加到3,然後繼續。與col循環相同。所以在循環結束時,你有3 * 3這是9.

相關問題