Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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无法将值输入2d数组_Java_Arrays - Fatal编程技术网

Java无法将值输入2d数组

Java无法将值输入2d数组,java,arrays,Java,Arrays,我有这个问题,我必须用1和0来模拟一个管道,0围绕着管道,1是管道本身 我使用一个2D数组来实现这一点,我的代码如下 for(int i = 0; i < x2; i++) { //x1 = 10, x2 = 20 for(int j = 0; j < x2; j++) { if(i >= x2 - (x1+x2)/2 && j <= (x1+x2)/2) { pipeArray[i]

我有这个问题,我必须用1和0来模拟一个管道,0围绕着管道,1是管道本身

我使用一个2D数组来实现这一点,我的代码如下

for(int i = 0; i < x2; i++) { //x1 = 10, x2 = 20
        for(int j = 0; j < x2; j++) {
            if(i >= x2 - (x1+x2)/2 && j <= (x1+x2)/2) {
                pipeArray[i][j] = 1;
            } else {
                pipeArray[i][j] = 0;
            }
        }
    }
它需要看起来像

 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000

这是您的条件
i>=x2-(x1+x2)/2&&j您缺少两个条件:j>=(x2-(x1+x2)/2)来限制左侧的1。你有右侧的条件。还有i=x2-(x1+x2)/2&&i试试这个:

for(int i=0;i<x2;i++){
    for(int j=0;j<x2;j++){
        if(i > x2 - (x1+x2)/2 && j <= (x1+x2)/2 && i<=(x1+x2)/2 && j>(x2-(x1+x2)/2) {
            pipeArray[i][j] = 1;
        } else {
            pipeArray[i][j] = 0;
        }
    }
}

<代码> >(int i=0;i ),您没有真正地解释规则,但是对于想要的输出,我假设您想要一个<代码> x2>代码> x<代码> x2< /代码>网格,其中1个是一个<代码> x1 <代码> x代码> x1 < /C> >块,中间被0包围。换句话说:

  • 如果坐标
    i
    j
    均大于
    (x2-x1)/2
    ,但小于或等于
    x2-(x2-x1)/2
    ,则为1;否则为0
它将被翻译为:

for(int i = 0; i < x2; i++) {
    for(int j = 0; j < x2; j++) {
        if(i > (x2-x1)/2 && j > (x2-x1)/2 && i <= x2-(x2-x1)/2 && j <= x2-(x2-x1)/2) {
            pipeArray[i][j] = 1;
        } else {
            pipeArray[i][j] = 0;
        }
    }
}
for(int i=0;i如果(i>(x2-x1)/2&&j>(x2-x1)/2&&i存在两个问题:首先,必须添加第二个条件,第二个条件是末尾只有4行/列0,因此您仍然需要进行减法,例如使用
(x1+x2-1)/2

for(inti=0;i=x2-(x1+x2)/2&&j=x2-(x1+x2)/2&&i:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    int map[][] = new int[n][n];

    int x = n/2;
    int xx = x/2;
    int odd = n%2;

    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            if((i >= x - xx && i < x + xx + odd) && (j >= x - xx && j < x + xx + odd)) map[i][j] = 1;
            else map[i][j] = 0;
        }
    }

    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            System.out.print(map[i][j]);
        }
        System.out.println();
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int n=scan.nextInt();
int map[][]=新的int[n][n];
int x=n/2;
int xx=x/2;
int奇数=n%2;
对于(inti=0;i=x-xx&&j对于(In i=0;II认为你需要交换代码的地方> 1 < /COD>和<代码> 0 <代码>。@ GunARME你确定吗?我敢肯定你会有0个在中间被你的代码包围着1个,而不是另一个方向。@我不知道我的答案和你的答案有什么不同,但是那就是我…条件是不同的。Et。你正在检查坐标在边框上的位置;我在检查它们在中间时的位置。换句话说,在哪里有<代码> <代码>,并且在哪里有<代码> > <代码> >我有<代码>=< /代码>到<代码> > /代码>。
for(int i = 0; i < x2; i++) {
    for(int j = 0; j < x2; j++) {
        if(i > (x2-x1)/2 && j > (x2-x1)/2 && i <= x2-(x2-x1)/2 && j <= x2-(x2-x1)/2) {
            pipeArray[i][j] = 1;
        } else {
            pipeArray[i][j] = 0;
        }
    }
}
    for(int i = 0; i < x2; i++) { //x1 = 10, x2 = 20
        for(int j = 0; j < x2; j++) {
            if(i >= x2 - (x1+x2)/2 && j <= (x1+x2-1)/2 && j >= x2 - (x1+x2)/2 && i <= (x1+x2-1)/2) {
                pipeArray[i][j] = 1;
            } else {
                pipeArray[i][j] = 0;
            }
        }
    }
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int n = scan.nextInt();
    int map[][] = new int[n][n];

    int x = n/2;
    int xx = x/2;
    int odd = n%2;

    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            if((i >= x - xx && i < x + xx + odd) && (j >= x - xx && j < x + xx + odd)) map[i][j] = 1;
            else map[i][j] = 0;
        }
    }

    for(int i=0;i<n;i++) {
        for(int j=0;j<n;j++) {
            System.out.print(map[i][j]);
        }
        System.out.println();
    }
}