мне нужен вывод таблиц умножения? что не так? - PullRequest
0 голосов
/ 10 марта 2011
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 в качестве ответа. Как так? что я тут не так делаю?

Ответы [ 4 ]

1 голос
/ 10 марта 2011

Вы, вероятно, хотите 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 голосов
/ 10 марта 2011

В каждом цикле строка увеличивается с использованием строки ++. Затем он проверяет, соответствует ли он критериям (строка <= 2). Если он не соответствует критериям, он прерывает цикл. Но это все еще увеличилось. Поэтому, когда строка достигает 2, она проходит через цикл, увеличивается до 3 и продолжается. То же самое с петлей col. Таким образом, в конце цикла у вас есть 3 * 3, что составляет 9. </p>

0 голосов
/ 10 марта 2011
  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);         
    
       }
    

    }

Итак, чему должны равняться строки и столбцы в конце этого утверждения? Они оба равны 3. Потому что вы зациклились, пока они не были равны 2 (поэтому во время последней итерации их значения были равны 2). Однако в конце последних итераций они оба были увеличены на 1, еще один раз, поэтому их значения равны 3.

Ваше возвращаемое значение - то, что является строкой * col. Используйте замену. 3 * 3 = 9. Вот и ты.

Для того, чтобы получить значения таблиц для просмотра, вы должны следовать совету Дмитрия в качестве лучшей практики. Если вы не понимаете этого, позвольте мне попытаться объяснить это в более простых терминах.

Чтобы ваше представление отображало таблицу, оно должно принимать данные, совместимые с таблицей. Нет способа конвертировать целое число в таблицу.

Вам нужны данные, которые выглядят так:

      1  2
   1  1  2
   2  2  4

Итак, вам нужно в простейшей форме двумерный целочисленный массив со значениями, такими как:

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

Итак, тип модели, которую должен принять ваш вид, примерно такой: int[][]

0 голосов
/ 10 марта 2011

Поскольку он вычисляется после цикла, answer в настоящее время является результатом умножения конечных значений row и col и игнорирует все начальные и промежуточные значения. Вам нужно создать набор результатов для отображения, добавив к этому набору в цикле, где у вас есть Console.Write(" the answer is " + row * col);.

Если вы сохраняете свои итерирующие переменные в цикле, ваша проблема и решение будут более очевидными, то есть удаление отдельного int row; и изменение оператора цикла на for (int row = 1; row <= 2; row++).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...