我正在尝试编写一个java方法,该方法将采用2d数组并将内容添加到指定行的新2d数组中。所以如果我有2d数组
1234
1234
1234
我想删除第3列,我想要
124
124
124
问题是我无法弄清楚如何让它发挥作用。我能想到的最好的方法是以下方法。
private static int[][] removeCol(int [][] array, int colRemove)
{
int row = array.length;
int col = array[0].length;
int [][] newArray = new int[row][col];
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
if(j != colRemove)
{
newArray[i][j] = array[i][j];
}
}
}
return newEx;
}
现在这个方法将返回此
1204
1204
1204
但如果我能得到我想要的结果,它会更好。有没有办法做到这一点,还是我坚持目前的结果?
答案 0 :(得分:1)
您可以使用一个变量currColumn
来表示当前列的位置,结果数组的列数将少于原始列。所以根据这个你可以改变你的代码。
private static int[][] removeCol(int [][] array, int colRemove)
{
int row = array.length;
int col = array[0].length;
int [][] newArray = new int[row][col-1]; //new Array will have one column less
for(int i = 0; i < row; i++)
{
for(int j = 0,currColumn=0; j < col; j++)
{
if(j != colRemove)
{
newArray[i][currColumn++] = array[i][j];
}
}
}
return newEx;
}
另一种更好的方法是使用像ArrayList这样的动态结构。所以在这里你需要有Array of ArrayList然后你可以用remove()方法删除元素。如果您想更新任何元素,则可以使用set()方法。
答案 1 :(得分:0)
只需使用另一个在循环运行时不会自动递增的索引:
//on the home page to display users posts
<h4>RECENT ACTIVITY</h4>
<div class="panel panel-default">
<div class="panel-body">
<?php
$users = show_users($_SESSION['login']);
if (count($users)){
$myusers = array_keys($users);
}else{
$myusers = array();
}
$myusers[] = $_SESSION['login'];
$posts = show_posts($myusers,5);
if (count($posts)){
foreach ($posts as $key => $list){
echo $list['post_date'] ;
echo $list['user_id'];
echo $list['post_body'] ;
}
}else{
echo"<p>","<b>","You haven't posted anything yet!","</b>","</p>";
}
?>
</div>
</div>
//the function
<?php
function show_posts($user_id,$limit=0){
global $conn,$user_id;
$posts = array();
$user_string = implode(',', $user_id);
$extra = " and user_id in ($user_string)";
if ($limit > 0){
$extra = "limit $limit";
}else{
$extra = '';
}
$sql = "select user_id,post_body, post_date from users_posts
where user_id in ($user_string)
order by post_date desc $extra";
echo $sql;
$result = mysqli_query($conn,$sql);
while($data = mysqli_fetch_object($result)){
$posts[] = array( 'post_date' => $data->post_date,
'user_id' => $data->user_id,
'post_body' => $data->post_body
);
}
return $posts;
}
?>
答案 2 :(得分:0)
将逻辑与基于0的列号保持一致:
private static int[][] removeCol(int[][] array, int colRemove) {
int row = array.length;
int col = array[0].length;
int[][] newArray = new int[row][col - 1]; // You will have one column less
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (j != colRemove) {
newArray[i][j > colRemove ? j -1 : j] = array[i][j]; // If you're looking at an index greater than the one to remove, you have to reduce index by one
}
}
}
return newArray;
}
答案 3 :(得分:0)
在第二次迭代中检查colRemove值并移动+1以进行其他迭代。请参阅以下代码
private static int[][] removeCol(int [][] array, int colRemove)
{
int row = array.length;
int col = array[0].length-1;
int [][] newArray = new int[row][col];
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
if(j>=colRemove){
newArray[i][j] = array[i][j+1];
}
else{
newArray[i][j] = array[i][j];
}
}
}
return newArray;
}
答案 4 :(得分:0)
实际上,您要使用默认值int
替换要删除的元素,即:0
。
如果不是要删除的元素,请复制元素:
if(j != colRemove)
{
newArray[i][j] = array[i][j];
}
否则您什么也不做(因此它取自0
的默认int
值。)
您应该从1减少新创建数组的第二维。
你可以这样:
使用全局循环迭代行(数组的第一维)
使用两个连续的内部循环来迭代列(数组的第二个维度)。
第一个迭代直到&#34;要删除的列 - 1&#34;并在新数组中制作元素的简单副本
第二个从&#34;列开始删除&#34;并转移到新数组中原始数组的每个元素。
这是一个有效的代码:
import java.util.Arrays;
public class Array2D {
public static void main(String[] args) {
int[][] arrayOriginal = new int[][]{{1,2,3,4},{1,2,3,4},{1,2,3,4}};
int[][] arrayNew = removeCol(arrayOriginal, 2);
System.out.println(Arrays.deepToString(arrayNew));;
}
private static int[][] removeCol(int [][] array, int colRemove)
{
int row = array.length;
int col = array[0].length;
int [][] newArray = new int[row][col-1];
for(int i = 0; i < row; i++)
{
for(int j = 0; j < colRemove; j++)
{
newArray[i][j] = array[i][j];
}
for(int j = colRemove; j < col-1; j++)
{
newArray[i][j] = array[i][j+1];
}
}
return newArray;
}
}
输出结果为:
[[1, 2, 4], [1, 2, 4], [1, 2, 4]]
答案 5 :(得分:-1)
public static String[][] dropColumnFromTable(String[][] table, int colNumber) {
int rows = table.length;
int col = table[0].length - 1;
String[][] result = new String[rows][col];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < col+1; j++) {
if (j < colNumber) {
result[i][j] = table[i][j];
} else if (j == colNumber) {
// Do nothing
} else if (j > colNumber) {
result[i][j-1] = table[i][j ];
}
}
}
return result;
}