For循环返回错误的值

本文关键字:错误 返回 循环 For | 更新日期: 2023-09-27 18:07:57

这可能是学生的错误,但我无法解决/得到正确的结果返回。

for循环是:

var sb = new StringBuilder();
for (int a = 1; a < numberOfRooms; a++)
{
    sb.Append(string.Format("<div id=HotelRoom{0}>", a)).AppendLine();
    sb.Append(string.Format("<p>Room {0}</p>", a)).AppendLine();
    sb.Append(string.Format("<select id=room{0}>", a)).AppendLine();
    sb.Append("<option value='"0'">Adults (18+)</option>").AppendLine();
    for (int i = 1; i < 9; i++)
    {
        sb.Append(string.Format("<option value={0}>{0}</option>", i)).AppendLine();
    }
    sb.Append("</select>").AppendLine();
    sb.Append(string.Format("<select id=ChildCountRoom{0}>", a)).AppendLine();
    sb.Append("<option value='"0'">Children 0 - 17</option>").AppendLine();
    for (int i = 1; i < 4; i++)
    {
        sb.Append(string.Format("<option value={0}>{0}</option>", i)).AppendLine();
    }
    sb.Append("</select>").AppendLine();
    sb.Append("</div>");
    sb.Append(string.Format("<div id='"NumberOfChildrenRoom{0}'"></div>",a)).AppendLine();
}
return sb.ToString(); 

在上面的代码中,即使我将值2传递给numberOfRooms,它也会循环两次,返回2条记录,即使循环从1

开始

内循环工作正常,即

for (int i = 1; i < 9; i++)

返回8

for (int i = 1; i < 4; i++)

返回3

谁能有一双新鲜的眼睛看到我做错了什么

谢谢

For循环返回错误的值

您提供的代码执行您编写的代码:它执行for循环体的时间比numberOfRooms的值少一次。

[并且意识到每次执行for循环体时,您正在编写不是一个,而是两个兄弟<div>元素,对吗?)

,

  • n=1,我得到一个空字符串作为结果,因为for循环的主体永远不会执行。

  • n=2, for循环体只执行一次,生成如下:

    <div id=HotelRoom1>
      <p>Room 1</p>
      <select id=room1>
        <option value="0">Adults (18+)</option>
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
        <option value=4>4</option>
        <option value=5>5</option>
        <option value=6>6</option>
        <option value=7>7</option>
        <option value=8>8</option>
      </select>
      <select id=ChildCountRoom1>
        <option value="0">Children 0 - 17</option>
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
      </select>
    </div>
    <div id="NumberOfChildrenRoom1"></div>
    
  • n=3, for循环体执行两次,生成

    <div id=HotelRoom1>
      <p>Room 1</p>
      <select id=room1>
        <option value="0">Adults (18+)</option>
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
        <option value=4>4</option>
        <option value=5>5</option>
        <option value=6>6</option>
        <option value=7>7</option>
        <option value=8>8</option>
      </select>
      <select id=ChildCountRoom1>
        <option value="0">Children 0 - 17</option>
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
      </select>
    </div>
    <div id="NumberOfChildrenRoom1"></div>
    <div id=HotelRoom2>
      <p>Room 2</p>
      <select id=room2>
        <option value="0">Adults (18+)</option>
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
        <option value=4>4</option>
        <option value=5>5</option>
        <option value=6>6</option>
        <option value=7>7</option>
        <option value=8>8</option>
      </select>
      <select id=ChildCountRoom2>
        <option value="0">Children 0 - 17</option>
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
      </select>
    </div>
    <div id="NumberOfChildrenRoom2"></div>
    

为了得到这个,我将你的代码粘贴到Visual Studio中,将其包装在一个简单的控制台应用程序中,并做了一点重构以使其更具可读性,因此:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication7
{
  class Program
  {
    static string GenerateHtml( int numberOfRooms )
    {
      var sb = new StringBuilder();
      for ( int a = 1 ; a < numberOfRooms ; a++ )
      {
        sb.AppendFormat( "<div id=HotelRoom{0}>"                            , a ).AppendLine() ;
        sb.AppendFormat( "  <p>Room {0}</p>"                                , a ).AppendLine() ;
        sb.AppendFormat( "  <select id=room{0}>"                            , a ).AppendLine() ;
        sb.AppendFormat( "    <option value='"0'">Adults (18+)</option>"        ).AppendLine() ;
        for ( int i = 1 ; i < 9 ; i++ )
        {
        sb.AppendFormat( "    <option value={0}>{0}</option>"               , i ).AppendLine() ;
        }
        sb.AppendFormat( "  </select>"                                          ).AppendLine() ;
        sb.AppendFormat( "  <select id=ChildCountRoom{0}>"                  , a ).AppendLine() ;
        sb.AppendFormat( "    <option value='"0'">Children 0 - 17</option>"     ).AppendLine() ;
        for ( int i = 1 ; i < 4 ; i++ )
        {
        sb.AppendFormat( "    <option value={0}>{0}</option>"               , i ).AppendLine() ;
        }
        sb.AppendFormat( "  </select>"                                          ).AppendLine() ;
        sb.AppendFormat( "</div>"                                               ).AppendLine() ;
        sb.AppendFormat( "<div id='"NumberOfChildrenRoom{0}'"></div>"       , a ).AppendLine() ;
      }
      return sb.ToString();
    }
    static void Main()
    {
      for ( int i = 0 ; i < 5 ; ++i )
      {
        Console.WriteLine() ;
        Console.WriteLine("=== {0} =============================================================" , i ) ;
        string html = GenerateHtml(i) ;
        Console.WriteLine( html ) ;
        Console.WriteLine("=====================================================================") ;
      }
      return;
    }
  }
}