我正试图获得这种矩阵:
1 0 0 0 5
0 2 0 4 0
0 0 3 0 0
0 2 0 4 0
1 0 0 0 5
这是代码:
$n = 5;
$flag = 0;
for($i=1; $i<=$n; $i++){
for($j=1; $j<=$n; $j++){
if($i == $j){
echo "$i ";
}else{
echo "0 ";
}
if($j == $n - $flag){
echo $n - $flag." ";
$flag++;
}
}
echo "</br>";
}
输出是:
1 0 0 0 0 5
0 2 0 0 4 0
0 0 3 3 0 0
0 0 2 0 4 0
0 1 0 0 0 5
中间出现了问题。我认为这是因为两个for循环在那里重叠。 如何修复thiis?
答案 0 :(得分:2)
尝试使用此代码输出所需的数组:
$n = 6;
for($i=1; $i<$n; $i++){
for($j=1; $j<$n; $j++){
if($i == $j){
echo "$i ";
} else if ($j == $n - $i) {
echo $n - $i ." ";
} else {
echo "0 ";
}
}
echo "</br>";
}
答案 1 :(得分:1)
原因不是循环中的重叠。它是两个if
语句的重叠。
在内循环中,总是打印6件事。
for($j=1; $j<=$n; $j++){
if($i == $j){ // <--- This will always print in each iteraton (i.e 5 times)
echo "$i ";
}else{
echo "0 ";
}
if($j == $n - $flag){ // <--- This will print once in the loop (the 6th extra)
echo $n - $flag." ";
$flag++;
}
}
由于$j
等于$flag
,因此您无需跟踪它。
将其更改为此(Check it on ideone):
for($j=1; $j<=$n; $j++){
if($i == $j){
echo "$i ";
} elseif($j == $n - $i + 1){
echo $n - ($i-1)." ";
} else {
echo "0 ";
}
}