吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 674|回复: 10
收起左侧

[求助] C# 数组报错

[复制链接]
apples1949 发表于 2022-7-28 20:01
[C#] 纯文本查看 复制代码
using System;

namespace _20220727
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.Write("请输入杨辉三角的行数(必须大于2):");
            int yhsjHS=Convert.ToInt32(Console.ReadLine());//键盘输入数组行数
            int yhsjLS = (yhsjHS + 1) * 2;//计算数组长度
            int[,] yhsj = new int[yhsjHS, yhsjLS - 1];//定义数组
            for (int i = 1, j = yhsjHS; j >= 0; i++, j--)//杨辉三角左斜边都是1
            {
                yhsj[i, j] = 1;
            }
            for (int i = yhsjLS - 1, j = yhsjHS; j > 0; i--, j--)//杨辉三角右斜边都是1
            {
                yhsj[i,j] = 1;
            }
            for (int i = 1, j = yhsjHS; j < 1; i++, j--)//杨辉三角内部左侧自然数
            {
                yhsj[i,j] = yhsjHS;
            }
            for (int i = yhsjLS - 1, j = yhsjHS; j < 1; i--, j--)//杨辉三角内部右侧自然数
            {
                yhsj[i, j] = yhsjHS;
            }
            for (int i = 2; i <= yhsjHS; i++)
            {
                for (int j = yhsjHS + 1; j >= yhsjLS - 3; j++)
                {
                    yhsj[i, j] = yhsj[i - 1, j - 1] + yhsj[i + 1, j - 1];
                }
            }
            for (int i = 0; i >= yhsjHS; i++)
            {
                for(int j=0;i>=yhsjLS-1;j++)
                {
                    Console.WriteLine(yhsj[i,j]);
                }
            }
        }
    }
}

报错提示:
[C#] 纯文本查看 复制代码
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at _20220727.Program.Main(String[] args) in C:\Users\apples1949\source\repos\20220727\Program.cs:line 15

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Raohz520 发表于 2022-7-28 20:10
你在问啥,索引超出了等等。。控制索引在0到数组长度-1就好了啊
dadaliya 发表于 2022-7-28 20:14
田田爱崽崽 发表于 2022-7-28 20:19
你能解释下如下你写的这个循环啥意思吗?
for (int i = 0; i >= yhsjHS; i++)
            {
                for(int j=0;i>=yhsjLS-1;j++)
                {
                    Console.WriteLine(yhsj[i,j]);
                }
            }
skypaladin 发表于 2022-7-28 20:35
直觉与算法无关。我觉得应该是 Line13 for 循环的问题:
for (int i = 1, j = yhsjHS; j >= 0; i++, j--)//杨辉三角左斜边都是1

-->

for (int i = 1, j = yhsjHS; j > 0; i++, j--)

or

for (int i = 1, j = yhsjHS; j >= 0; i++, --j)
 楼主| apples1949 发表于 2022-7-28 20:38
田田爱崽崽 发表于 2022-7-28 20:19
你能解释下如下你写的这个循环啥意思吗?
for (int i = 0; i >= yhsjHS; i++)
            {

最后输出数组用的,还没有跑这段
 楼主| apples1949 发表于 2022-7-28 20:40
skypaladin 发表于 2022-7-28 20:35
直觉与算法无关。我觉得应该是 Line13 for 循环的问题:

-->

还是报错
zhangbo093 发表于 2022-7-28 21:03

第13行变量i下标超了。
修改方法:建议改12行数组大小,先让程序运行不报错,再考虑从哪里修改。
int[,] yhsj = new int[yhsjHS, yhsjLS - 1];//定义数组
改为
int[,] yhsj = new int[yhsjHS * 10, yhsjLS * 10];//定义数组
zhangbo093 发表于 2022-7-28 21:06

给你一个调试思路:在报错行(15行)打断点,一次一次循环看i和j的值,你就明白哪里错了,也就知道该怎么修改了。祝楼主好运!
Zerox98 发表于 2022-7-28 21:22
问题太多了,第一个循环改完,第二个循环里索引又超了。我感觉你是在输出杨辉三角形,就把其他循环先注释掉,看看你输出什么,发现你36行for循环的判断条件写的根本进不去循环,问题有点多好像(或者我没看懂你的思路)。
关于数组越界,你输入个3,加断点,一行一行看,总能该对的。算法就得想清楚了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表