Java无法将值输入2d数组
我有这个问题,我必须用1和0来模拟一个管道,0围绕着管道,1是管道本身 我使用一个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]
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();
}
}