Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组大小不确定的写循环_Java_For Loop_Foreach_While Loop - Fatal编程技术网

Java 数组大小不确定的写循环

Java 数组大小不确定的写循环,java,for-loop,foreach,while-loop,Java,For Loop,Foreach,While Loop,下面的代码工作正常 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[

下面的代码工作正常

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;
            }
        }
    }
}

代码不起作用

我不是100%确定你的函数应该产生什么结果,但是如果你想在一个函数中得到与你的代码等价的结果,那么它应该是这样的(假设C#是语言):

private int[]list=new int{3,5,10};
public void Generate()
{
List toPrint=新列表();
string num_string=string.Empty;
string base_string=string.Empty;
对于(int i=list.length;i>-1;i--)
{
num_string=num_string+list[i].ToString();
基本字符串=基本字符串+'0';
}
lastnumber=Int16.parse(num_string[list.length-1]);
int string_length=base_string.length;
bool running=true;
(跑步时)
{   
bool finished=true;
对于(int incr=0;incr对于(int i=2;i我不能100%确定您的函数应该产生什么结果,但是如果您希望在单个函数中获得与代码等效的结果,那么它将如下所示(假设C#作为语言):

private int[]list=new int{3,5,10};
public void Generate()
{
List toPrint=新列表();
string num_string=string.Empty;
string base_string=string.Empty;
对于(int i=list.length;i>-1;i--)
{
num_string=num_string+list[i].ToString();
基本字符串=基本字符串+'0';
}
lastnumber=Int16.parse(num_string[list.length-1]);
int string_length=base_string.length;
bool running=true;
(跑步时)
{   
bool finished=true;
对于(int incr=0;incr
对于(inti=2;i这是什么语言?Java?C#?这是Java代码我建议使用递归来“生成”您的for循环。即for循环位于一个助手递归函数中,该函数在增加索引值时调用自身。然后,当您遇到基本情况时,您只需分配/print/return/mutate/&c结果并弹出备份。将递归和迭代结合使用可能是最容易实现的,而不是将所有内容转换为单独的迭代f函数(尽管任何递归函数都可以作为迭代函数重新实现…。我对此进行了研究。你能写一个例子吗?这是什么语言?Java?C?这是Java代码我建议使用递归来“生成”您的for循环。即for循环位于一个助手递归函数中,该函数在增加索引值时调用自身。然后,当您遇到基本情况时,您只需分配/print/return/mutate/&c结果并弹出备份。将递归和迭代结合使用可能是最容易实现的,而不是将所有内容转换为单独的迭代f函数(尽管任何递归函数都可以作为迭代函数重新实现…)。我研究了它。你能写一个例子吗?我的代码打印[0,0,0][0,0,1][0,0,2]…[0,0,10][0,1,0][0,1,0],最后完成了[3,5,10]我明白了。我根据你的上述评论编辑了代码。谢谢你的努力。我还不能运行这段代码,因为base\u字符串[base_string.length-i]=currentnumber here base_string last char不能转换为整数。我应该替换吗?我对此表示歉意。我在那一行添加了转换,所以它应该可以工作。您使用的是什么语言?如果这对您有效,您可以选择它作为答案。谢谢。我的代码打印[0,0,0][0,0,1][0,0,2]…[0,0,10][0,1,0]最后完成[3,5,10]我明白了。我根据您上面的评论编辑了代码谢谢您的努力。我还不能运行此代码,因为base_string[base_string.length-I]=currentnumber here base\u string last char不能转换为整数。我应该替换吗?我对此表示歉意。我在那一行添加了转换,所以它应该可以工作。您使用什么语言?如果这对您有效,您可以选择它作为答案。谢谢。
private int[] list = new int[]{ 2, 5, 12,18};
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()
}