Java 如何从给定范围的数组中打印所有子数组?

Java 如何从给定范围的数组中打印所有子数组?,java,arrays,Java,Arrays,我想打印范围为2.0的给定数组中的所有子数组 范例 对于上述数组,范围2的子数组如下所示 {1,2}; {2,3}; {3,4}; 1 1 2 1 2 3 1 2 3 4 2 2 3 2 3 4 3 3 4 4 我有一个类,它打印数组的所有子数组,如下所示 public class PrintSubarrayMain { public static void main(String args[]){ PrintSubarrayMain psm=

我想打印范围为2.0的给定数组中的所有子数组 范例

对于上述数组,范围2的子数组如下所示

{1,2};
{2,3};
{3,4};
1 
1 2 
1 2 3 
1 2 3 4 
2 
2 3 
2 3 4 
3 
3 4 
4 
我有一个类,它打印数组的所有子数组,如下所示

 public class PrintSubarrayMain {

    public static void main(String args[]){
        PrintSubarrayMain psm=new PrintSubarrayMain();
        int arr[]= {1,2,3,4};
        psm.printSubArray(arr);
    }

    void printSubArray(int arr[])
    {

        int n=arr.length;
        for (int i=0; i <n; i++) //This loop will select start element
        {
            for (int j=i; j<n; j++)   //This loop will select end element
            {
                for (int k=i; k<=j; k++) //This loop will print element from start to end

                {
                    System.out.print( arr[k]+" "); 
                }
                System.out.println();
            }
        }
    }
}

但我无法打印具有特定范围的子数组?请帮助我解决此问题。

您可以按如下方式执行:

public class PrintSubarrayMain {

    public static void main(String args[]) {
        PrintSubarrayMain psm = new PrintSubarrayMain();
        int arr[] = { 1, 2, 3, 4 };
        psm.printSubArray(arr);
    }

    void printSubArray(int arr[]) {     
        for (int i = 0; i <arr.length-1; i++) {
            int [] subArr=new int[2];
            System.arraycopy(arr,i, subArr, 0, 2);
            for (int j=0;j<2;j++)
                System.out.print(subArr[j]+ " ");
            System.out.println();
        }       
    }
}
更新:按照您的要求,不使用
System.arraycopy进行更新

public class PrintSubarrayMain {

    public static void main(String args[]) {
        PrintSubarrayMain psm = new PrintSubarrayMain();
        int arr[] = { 1, 2, 3, 4 };
        psm.printSubArray(arr);
    }

    void printSubArray(int arr[]) {     
        for (int i = 0; i <arr.length-1; i++) {
            for(int j=i;j<i+2;j++)
                System.out.print(arr[j]+" ");
            System.out.println();
        }       
    }
}
更新:根据您的要求添加范围

public class PrintSubarrayMain {

    public static void main(String args[]) {
        PrintSubarrayMain psm = new PrintSubarrayMain();
        int arr[] = { 1, 2, 3, 4 };
        int range = 3;
        psm.printSubArray(arr, range);
    }

    void printSubArray(int arr[], int range) {
        if (range <= arr.length)
            for (int i = 0; i < arr.length - range + 1; i++) {
                for (int j = i; j < i + range; j++)
                    System.out.print(arr[j] + " ");
                System.out.println();
            }
        else
            System.out.println("Range is greater than the size of the array");
    }
}

不需要第二个循环。您可以声明一个变量范围,然后将结束值查找为j=i+range,最外层的循环应该具有终止条件,即i您对特定范围的含义是什么?我不确定您想要为(int I=0;I
实现什么
您没有在代码中的任何地方传递范围值。@MatthiasLauber我在问题中提到过..需要按一些值对数组进行分组,上面的代码打印输出,但我不应该使用任何预定义的方法或集合,仅用于循环逻辑是的,它几乎满足了我的要求,但如何使其在范围3内无异常..这正是我想要的。。但是如何处理ArrayIndexOutOfBoundsException…对于范围3…声明一个变量“range”,并在第一个循环中将n-1替换为n-range,将j=i+2替换为j=i+range。
public class PrintSubarrayMain {

    public static void main(String args[]) {
        PrintSubarrayMain psm = new PrintSubarrayMain();
        int arr[] = { 1, 2, 3, 4 };
        psm.printSubArray(arr);
    }

    void printSubArray(int arr[]) {     
        for (int i = 0; i <arr.length-1; i++) {
            for(int j=i;j<i+2;j++)
                System.out.print(arr[j]+" ");
            System.out.println();
        }       
    }
}
1 2 
2 3 
3 4 
public class PrintSubarrayMain {

    public static void main(String args[]) {
        PrintSubarrayMain psm = new PrintSubarrayMain();
        int arr[] = { 1, 2, 3, 4 };
        int range = 3;
        psm.printSubArray(arr, range);
    }

    void printSubArray(int arr[], int range) {
        if (range <= arr.length)
            for (int i = 0; i < arr.length - range + 1; i++) {
                for (int j = i; j < i + range; j++)
                    System.out.print(arr[j] + " ");
                System.out.println();
            }
        else
            System.out.println("Range is greater than the size of the array");
    }
}
1 2 3 
2 3 4 
void printSubArray(int arr[])
{
    int range=3;
    int n=arr.length;
    for (int i=0; i <=n-range; i++) //This loop will select start element
    {       
            int j=i+range;
            for (int k=i; k<j; k++) //This loop will print element from start to end

            {
                System.out.print( arr[k]+" "); 
            }
            System.out.println();

    }
}