【问题标题】:Writing loop of uncertain size of array数组大小不确定的写入循环
【发布时间】:2023-03-30 23:22:01
【问题描述】:

以下代码运行良好。

private int[] list = new int[]{ 3, 5, 10};
private int[] temp = new int[list.length];

public void Generate()
{
    for (int a=0;a<list[0];a++)
    {
        temp[0] = a;
        for (int b=0;b<list[1];b++)
        {
            temp[1] = b;
            for (int c=0;c<list[2];c++)
            {
                temp[2] = c;
                int[] asd = temp;
            }
        }
    }
}

但如果我更改列表数组长度,我必须在里面添加一个 for 循环。如何为任何大小的列表数组编写一种方法?例如:

private int[] list = new int[]{ 2, 5, 12,18};

代码不起作用!

【问题讨论】:

  • 这是什么语言?爪哇? C#?
  • 这是java代码
  • 我建议使用递归来“生成”你的 for 循环。 IE。 for 循环位于一个辅助递归函数中,该函数在增加索引值时调用自身。然后,当您遇到基本情况时,您只需分配/打印/返回/变异/&c 结果并弹出。一起使用递归和迭代可能是最容易实现的,而不是将所有内容都转换为单独的迭代函数(尽管任何递归函数都可以重新实现为迭代函数......)。
  • 我对此进行了研究。你能写一个例子吗?

标签: java for-loop foreach while-loop


【解决方案1】:

我不能 100% 确定您的函数应该产生什么结果,但如果您希望在单个函数中与您的代码等效,那么它看起来像这样(假设 C# 作为语言):

private int[] list = new int {3, 5, 10};

public void Generate()
{
    List<string> toPrint = new List<string>();
    string num_string = string.Empty;    
    string base_string = string.Empty;
    for(int i=list.length; i>-1; i--)
    {
        num_string = num_string + list[i].ToString();
        base_string = base_string +'0';
    }
    lastnumber = Int16.parse(num_string[list.length - 1]);
    int string_length = base_string.length;
    bool running = true;
    while(running)
    {   
        bool finished = true;
        for(int incre=0; incre < lastnumber; incre ++)
        {
            string temp = base_string;
            temp[string_length-1] = (char)incre;
            toPrint.add(temp);
        }
        for(int i = 2; i <= base_string.length; i++ )
        {
            int currentnumber = Int16.Parse(base_string[base_string.length - i]);
            int number_limit = Int16.Parse(num_string[base_string.length -i]));
            if(currentnumber < number_limit)
            {
                currentnumber = currentnumber +1;
                base_string[base_string.length - i] = (char)currentnumber
                finished = false;
                break;
            }

            if(finished)
            {
                base_string[base_string.length - i] = 0
            }
        }

        if(finished)
        {
            running = false;
        }

    }
    string [] asd = toPrint.ToArray()
}

这就是你要找的吗?如果没有,您能否提供更多详细信息,以便我获得更好的背景信息?

【讨论】:

  • 我的代码打印 [0,0,0] [0,0,1][0,0,2]...[0,0,10][0,1,0] [ 0,1,0] 最终完成 [3,5,10]
  • 我明白了。我根据您的上述评论编辑了代码
  • 感谢您的努力。我无法运行此代码,因为 base_string[base_string.length - i] = currentnumber here base_string last char 无法转换为整数。我应该更换吗?
  • 我很抱歉。我在那条线上添加了一个演员表,所以它应该可以工作。您使用什么语言?
  • 如果这对你有用,你可以选择它作为答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2010-12-30
  • 2022-01-01
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
相关资源
最近更新 更多