求助! 看图求一循环。

liuxiaoboQQ 2014-12-09 06:30:12
...全文
369 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
{"5", 2, 2} 写错了.
  • 打赏
  • 举报
回复
现在的人啊,只会用现成的代码啦,给你C#版的
static void Main(string[] args)
        {
            var arr = new object[9, 3]{
                 {"1", 0, 0},
                 {"2", 0, 0},
                 {"3", 1, 0},
                 {"4", 0, 0},
                 {"5", 2, 2},
                 {"6", 1, 1},
                 {"7", 0, 0},
                 {"8", 2, 2},
                 {"9", 0, 0}
            };

            fx(arr, 0, 9);
        }
        static void fx(object[,] arr, int x, int y)
        {
            for (; x < y; x++)
            {
                Console.WriteLine(arr[x,0]);
                for (var i = 0; i < (int)arr[x, 1]; i++)
                {
                    fx(arr, x - (int)arr[x, 2], x);
                    Console.WriteLine(arr[x, 0]);
                }
            }
        }
lkhuge 2014-12-11
  • 打赏
  • 举报
回复
引用 14 楼 pengwu666 的回复:
[quote=引用 7 楼 lkhuge 的回复:] 我这里就不用WinForm了 直接用控制台代码吧
string[] textList   = {"1","2","3","4","5","6","7","8","9"};
//int[]    countList  = { 0 , 0 , 1 , 0 , 2 , 1 , 0 , 0 , 0 };
//int[]    jumpList   = { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 };

int[]    countList =  { 0 , 0 , 1 , 0 , 2 , 1 , 0 , 2 , 0 };
int[]    jumpList   = { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 0 };

List<List<string>> logList = new List<List<string>>();
for (int i = 0; i < textList.Length; i++)
{
    List<string> tempList = new List<string>();
    logList.Add(tempList);
    for (int c = 0; c <= countList[i]; c++)
    {
        tempList.Add(textList[i]);
        Console.WriteLine(textList[i]);
        if (c == countList[i]) continue;
        for (int j = i - jumpList[i]; j < i; j++)
        {
            tempList.AddRange(logList[j]);
            foreach (string v in logList[j])
            {
                Console.WriteLine(v);
            }
        }
    }
}
这个测试可以,我要仔细看看。[/quote] 写的比较仓促 其实代码还可以在调整优化 反正凑合着大概看看吧~~
liuxiaoboQQ 2014-12-11
  • 打赏
  • 举报
回复
引用 7 楼 lkhuge 的回复:
我这里就不用WinForm了 直接用控制台代码吧
string[] textList   = {"1","2","3","4","5","6","7","8","9"};
//int[]    countList  = { 0 , 0 , 1 , 0 , 2 , 1 , 0 , 0 , 0 };
//int[]    jumpList   = { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 };

int[]    countList =  { 0 , 0 , 1 , 0 , 2 , 1 , 0 , 2 , 0 };
int[]    jumpList   = { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 0 };

List<List<string>> logList = new List<List<string>>();
for (int i = 0; i < textList.Length; i++)
{
    List<string> tempList = new List<string>();
    logList.Add(tempList);
    for (int c = 0; c <= countList[i]; c++)
    {
        tempList.Add(textList[i]);
        Console.WriteLine(textList[i]);
        if (c == countList[i]) continue;
        for (int j = i - jumpList[i]; j < i; j++)
        {
            tempList.AddRange(logList[j]);
            foreach (string v in logList[j])
            {
                Console.WriteLine(v);
            }
        }
    }
}
这个测试可以,我要仔细看看。
liuxiaoboQQ 2014-12-11
  • 打赏
  • 举报
回复
引用 8 楼 Z65443344 的回复:
看不懂你这是怎么跳的,规则写的太少了 按你的规则,6如果写了1就跳转到5的话,不是应该死循环了吗
第一张图的第三行就写了1,结果并没有23232323...的死循环啊,对吧
liuxiaoboQQ 2014-12-11
  • 打赏
  • 举报
回复
引用 10 楼 Z65443344 的回复:
而且不仅规则少,规则之间还互相矛盾 2明明写的是输出跟文本没关系,3里又有关系了 好歹写个明确的规则出来啊
跳转只会执行一次,4楼的那位说的没有错。不会有死循环。 第一列的文本内容与流程是没有关系。只是为了直观改为1-9,改成其他如何内容都可以,只是按顺序输出。
ajaxfeifei 2014-12-11
  • 打赏
  • 举报
回复

public class mainclass
{
        public void main()
{
var writeobjects=new List<WriteObject>(){new WriteObject("1",0,0)};
WriteArry(writeobjects);
}
        public void Write(StringBuilder sb, WriteObject writeObject)
        {
            for (int i = 0; i <= writeObject.Times; i++)
            {
                sb.AppendLine(writeObject.Text);
            }
        }

        public void WriteArry(List<WriteObject> objects)
        {
            var sb=new StringBuilder();
            for (int i = 0; i < objects.Count; i++)
            {
                var writeObject = objects[i];
                Write(sb, writeObject);
                if (writeObject.JumpIndex > 0)
                {
                    Write(sb, objects[i-writeObject.Times]);
                }
            }
        }
    }

    public class WriteObject
    {
        public string Text { get; set; }
        public int Times { get; set; }
        public int JumpIndex { get; set; }
        public WriteObject(string text,int times,int jumpindex)
{
Text=text;
Times=times;
JumpIndex=jumpindex;
}
    }
effun 2014-12-11
  • 打赏
  • 举报
回复
给你来个复杂的版本

    class Program
    {
        static void Main(string[] args)
        {
            RuleExecuter exec = new RuleExecuter();

            exec.AddRule("1", 0, 0);
            exec.AddRule("2", 0, 0);
            exec.AddRule("3", 1, 0);
            exec.AddRule("4", 0, 0);
            exec.AddRule("5", 2, 0);
            exec.AddRule("6", 1, 1);
            exec.AddRule("7", 0, 0);
            exec.AddRule("8", 2, 2);
            exec.AddRule("9", 0, 0);

            exec.Execute(Console.Out);

            Console.ReadKey();
        }
    }

    class Rule
    {
        public Rule(string content, int max, int jump)
        {
            Content = content;
            MaxOutput = max;
            Jump = jump;
        }

        /// <summary>
        /// 文本
        /// </summary>
        public string Content { get; set; }

        /// <summary>
        /// 输出次数
        /// </summary>
        public int MaxOutput { get; set; }

        /// <summary>
        /// 跳转
        /// </summary>
        public int Jump { get; set; }

        int _count;

        public void Execute(TextWriter output)
        {
            output.WriteLine(Content);
            _count++;
        }

        public bool HasFinished
        {
            get { return _count > MaxOutput; }
        }

        public void Reset()
        {
            _count = 0;
        }
    }

    class RuleExecuter
    {

        public RuleExecuter()
        {
            _rules = new List<Rule>();
        }

        private List<Rule> _rules;

        public List<Rule> Rules
        {
            get { return _rules; }
        }

        public Rule AddRule(string content, int max, int jump)
        {
            Rule rule = new Rule(content, max, jump);
            _rules.Add(rule);
            return rule;
        }

        public void Execute(TextWriter output)
        {
            Rule[] array = _rules.ToArray();
            int index = 0, length = array.Length;

            while (index < length)
            {
                Rule rule = array[index];

                if (rule.HasFinished)
                    rule.Reset();

                rule.Execute(output);

                if (!rule.HasFinished)
                {
                    index -= rule.Jump;
                }
                else
                    index++;
            }
        }
    }
FTD_Fred 2014-12-10
  • 打赏
  • 举报
回复
这个东西不是叫递归么
liuxiaoboQQ 2014-12-10
  • 打赏
  • 举报
回复
引用 4 楼 qldsrx 的回复:
[quote=引用 2 楼 pengwu666 的回复:] 输出次数应该是没问题的。但是要加跳转的就搞不懂了。
说明文字看了吗?第三条规则,如果跳转次数1,就执行上面一条输出规则,2则执行上面第二条执行规则,跳转是跳到某条规则的意思,至于那条规则会输出多少次,或者那条规则本身是否还存在跳转,都没关系,照着那条规则执行就可以了。不过被跳转的规则执行是一次性的,例如第二个图中,第8条规则执行后,再执行它的跳转——第6条规则,第6条规则执行后,又去执行它的跳转第5条规则,第5条规则没有跳转,执行后就回到第8条规则,而不是停留在第5条规则,之后第8条规则结束,执行第9条规则。[/quote] 流程的确是这样的,我的问题是怎样实现这个循环。
  • 打赏
  • 举报
回复
<!DOCTYPE html>
<html>
    <head>
        <title>结贴啦</title>
    </head>
    <body></body>
    <script type="text/javascript">
        var arr = [
            ['1', 0, 0],
            ['2', 0, 0],
            ['3', 1, 0],
            ['4', 0, 0],
            ['5', 2, 0],
            ['6', 1, 1],
            ['7', 0, 0],
            ['8', 2, 2],
            ['9', 0, 0]
        ], str = [];

        (function fx(x, y) {
            for(;x < y; x++) {
                str.push(arr[x][0]);
                for(var i = 0; i < arr[x][1]; i++) {
                    fx(x - arr[x][2], x);
                    str.push(arr[x][0]);
                }
            }
        })(0, arr.length);

        document.body.innerHTML = str.join('<br/>');
</script>
</html>
於黾 2014-12-10
  • 打赏
  • 举报
回复
而且不仅规则少,规则之间还互相矛盾 2明明写的是输出跟文本没关系,3里又有关系了 好歹写个明确的规则出来啊
於黾 2014-12-10
  • 打赏
  • 举报
回复
看不懂你这是怎么跳的,规则写的太少了 按你的规则,6如果写了1就跳转到5的话,不是应该死循环了吗
lkhuge 2014-12-10
  • 打赏
  • 举报
回复
我这里就不用WinForm了 直接用控制台代码吧
string[] textList   = {"1","2","3","4","5","6","7","8","9"};
//int[]    countList  = { 0 , 0 , 1 , 0 , 2 , 1 , 0 , 0 , 0 };
//int[]    jumpList   = { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 };

int[]    countList =  { 0 , 0 , 1 , 0 , 2 , 1 , 0 , 2 , 0 };
int[]    jumpList   = { 0 , 0 , 0 , 0 , 0 , 1 , 0 , 2 , 0 };

List<List<string>> logList = new List<List<string>>();
for (int i = 0; i < textList.Length; i++)
{
    List<string> tempList = new List<string>();
    logList.Add(tempList);
    for (int c = 0; c <= countList[i]; c++)
    {
        tempList.Add(textList[i]);
        Console.WriteLine(textList[i]);
        if (c == countList[i]) continue;
        for (int j = i - jumpList[i]; j < i; j++)
        {
            tempList.AddRange(logList[j]);
            foreach (string v in logList[j])
            {
                Console.WriteLine(v);
            }
        }
    }
}
qldsrx 2014-12-09
  • 打赏
  • 举报
回复
引用 2 楼 pengwu666 的回复:
输出次数应该是没问题的。但是要加跳转的就搞不懂了。
说明文字看了吗?第三条规则,如果跳转次数1,就执行上面一条输出规则,2则执行上面第二条执行规则,跳转是跳到某条规则的意思,至于那条规则会输出多少次,或者那条规则本身是否还存在跳转,都没关系,照着那条规则执行就可以了。不过被跳转的规则执行是一次性的,例如第二个图中,第8条规则执行后,再执行它的跳转——第6条规则,第6条规则执行后,又去执行它的跳转第5条规则,第5条规则没有跳转,执行后就回到第8条规则,而不是停留在第5条规则,之后第8条规则结束,执行第9条规则。
qldsrx 2014-12-09
  • 打赏
  • 举报
回复
问题在哪里?
liuxiaoboQQ 2014-12-09
  • 打赏
  • 举报
回复
输出次数应该是没问题的。但是要加跳转的就搞不懂了。
liuxiaoboQQ 2014-12-09
  • 打赏
  • 举报
回复
在来一张,复杂点的。
请先阅读帮助文档:http://ismyway.com/help [2009.1.1] Ver 3.2.26 ※如果安装提示证书过期或无法安装,请在手机上将时间改为2008.8.8,安装设置完成后再将日期改回即可!※ 增加天语的按键映射 增加三星的背景灯控制功能(该功能未在真机上测试过) 删除图片浏览中的部分功能,由于这部分功能需要较大的内存,导致在大部分手机上无法完成,同时也引起背景图片无法设置成功 触摸屏用户可以不再受滚动条限制,在屏幕上任意地方都可以进行拖动 选择键盘映射为其它时无法再次更改的BUG 用户输入的颜色值无法保存的BUG 修正英文单词分词时会多添加一个空行的BUG 繁体语言措词上的修正 阅读设置中增加一个“文件缓存”选项,默认情况下是开启的,在NOKIA手机上会提高UMD等文件的表现,但由于测试并不充足,如果程序经常在阅读时出错,请关闭该选项(其它手机是否开启该选项并无明显的影响) 修正编辑文件后无法保存的BUG [2008.10.27] Ver 3.2.24 ※如果安装提示证书过期或无法安装,请在手机上将时间改为2008.8.8,安装设置完成后再将日期改回即可!※ 改进的颜色选择方式 允许用户重新选择键盘映射 HTML阅读时的错误 进一步完善编辑功能(仍有少许BUG,请继续反馈,谢谢) 新建文件后自动跳转到编辑中 改进的文件操作方式,速度轻微提升 UMD速度明显提升,并且减少内存占用,特别是在NOKIA手机上,表现提升超过600% 改进的输入框模式,以使得能适应更多的手机如天语等 [2008.10.21] Ver 3.2.23 为了提高运行效率,以下功能在LITE上将被取消(自定义欢迎页问候语;欢迎页背景图) 取消了JAR的支持,提高运行效率 修正打开大ZIP文件时的内存溢出错误 ·修正:  自动滚屏到末尾时,滚屏功能将停止 [2008.10.4] Ver 3.2.22 暂时删除了播放功能及网络相关的功能,由于以上两项功能一直没有能稳定下来,故暂时删除 增强了ZIP功能,支持带文件夹结构的ZIP/JAR文件 (对于大部分JAR电子书都,可以从文件管理器中找到非.class结尾的文件,并且选择打开为UNICODE/TXT阅读) (对于NOKIA手机及其它部分手机,由于安全策略的限制,在Anyview的文件管理器中无法查看后缀为.jar的文件) 自定义问候语(系统路径下dictum.rc文件,格式参见jar包中的dictum.rc文件,保存时使用UTF-8编码,可写条目为0~9/a~z/A~Z,置空时表示不显示问候语) ·修正:  0键在各偏好中切换时亮度混乱的问题  部分手机上无法新建文件夹 [2008.9.11] Ver 3.2.21 修正动画参数无法保存的BUG 动画效果不再对阅读翻页有作用 [2008.8.29] Ver 3.2.21 可将正在阅读的内容通过短信与好友分享 增加一种新的滚屏方式:波浪,同时,阅读时3键不再使用默认的像素滚屏,而会使用最后一次使用的滚屏方式 任何可用的外置字库都可以作为内置字库存在,在jar包中存在dot.font会被当为内置字库加载 加快大文件的打开速度,特别是对于NOKIA手机,S60上,打开20M文件,97%左右的位置不超过15秒 允许用户打开动画效果 ·M600/P990/P1/W950  修正键盘映射时“内存不足”的BUG ·E680/A780  选中后台播放后无法启动的BUG [2008.7.30] Ver 3.2.20 调整部分索爱手机上背景灯控制的逻辑 修正看图片时按0键出错的BUG 旋转屏幕引起的字外出 打开LRC最后出错 阅读到尾部弹出“上一个/下一个”窗口中的文件名过长不刷新的问题 偏好切换时亮度混乱的问题 在NOKIA上,当系统路径设置为根目录是无法启动的BUG E398上可以开关键盘灯 UIQ系统在退出时可以保持亮度 索爱上按“返回”键后导致阅读出现白屏的BUG 阅读时切换屏幕方向导致字体超出屏幕的BUG 欢迎屏幕上的日期使用中文显示 如果使用触屏手机,跳转改为进度条模式,以方便触屏操作 系统路径下如果存在bg.png文件,则会作为欢迎界面的背景图片显示(右下角) 减少跳转及翻页中出现乱码的机率 提高阅读时绘图效率,滚屏效率同样提高 播放时,暂停会导致声音爆至最大的BUG 内置“忘记月亮”制作的两款主题《典雅红》《黑橙》,并且更换主题不再要求退出 文件管理器中支持“剪切”功能 文件管理器中新增转换UMD为TXT的功能(解开操作,解开2无效!) 增加了编辑功能(尽管没有限制文件大小,但请别编辑过大的文件,另外,为了提高速度,不进行全文排版,有时候表现可能会有些不习惯),以后会进一步完善 启动时,会自动识别NOKIA、SONYER

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧