我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如:
2 22 3
5 1 54
7 3 10
20 22 21
这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素是20,但我们不能选择20作为最小元素,因为我们检查了第二个2d数组中的列之和,这个数组是用0初始化的,所以这里如果我们选择20,那么它的列之和是21,因为我们选择了21,如果我们选择了22,那么我们选择了22,那么我们选择了22,那么我们选择了21,那么我们选择了21,这里21是最小的,因为它的列之和是最小的:
1 0 0
0 1 0
0 3 0
0 0 21
如果有其他行和列,这个过程会继续进行。
这就是我到目前为止所做的:
import java.util.Arrays;
public class Main
{
//Method which finds the sum of columns
public static int[] sumOfCol(int[][] tempArr){
int size = tempArr[0].length; // Replace it with the size of maximum length inner
array
int temp[] = new int[size];
for (int i = 0; i < tempArr.length; i++){
for (int j = 0; j < tempArr[i].length; j++){
temp[j] += tempArr[i][j];
}
}
System.out.println(Arrays.toString(temp));
return temp;
}
//The algorithm
public static void algorithm(int[][] tempArr,int[][] tempArr2){
for (int i = 0; i < tempArr.length; i++) {
int minimum = tempArr[i][0];
for (int j = 0; j < tempArr[0].length; j++) {
if (tempArr[i][j] < minimum) {
minimum = tempArr[i][j];
tempArr2[i][j] = minimum;
}
}
}
}
//To generate teh Array
public static void generateArray(int[][] arr){
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
arr[i][j] = (int) ((Math.random() * (25 - 1)) + 1);
}
}
}
//To print an array
public static void printArray(int[][] arr){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int [][] tempArr = new int [5][3];
int[][] tempArr2 = new int[tempArr.length][tempArr[0].length];
//Initilise second array with 0's
for (int i = 0; i < tempArr2.length; i++) {
for (int j = 0; j < tempArr2[0].length; j++) {
tempArr2[i][j] = 0;
}
}
generateArray(tempArr);
System.out.println("Array before executing the algorithm : ");
printArray(tempArr);
algorithm(tempArr,tempArr2);
System.out.println("Array after executing the algorithm : ");
printArray(tempArr2);
}
}
我无法找到你的代码中的错误,但找到了另一种方法来做你正在寻找的:
//The algorithm
public static int[][] algorithm(int[][] tempArr){
// create the empty array.
int[][] modifiedArr = new int[tempArr.length][tempArr[0].length];
for (int i = 0; i < modifiedArr.length; i++) {
for (int j = 0; j < modifiedArr[0].length; j++) {
modifiedArr[i][j] = 0;
}
}
// loop through all rows and change one value in each row on modifiedArr in a way that leads to the column sum being miniumum.
for (int i = 0; i < tempArr.length; i++) {
setMinimumColumn(tempArr,modifiedArr,i);
}
return modifiedArr;
}
static void setMinimumColumn(int[][] originalArr, int[][] modifiedArr, int row){
int minColumn = 0;
int minColumnSum = Integer.MAX_VALUE;
for (int i=0; i <originalArr[row].length ;i++){
modifiedArr[row][i] = originalArr[row][i];
int columnSum = getColumnSum(modifiedArr,i);
if (columnSum < minColumnSum) {
minColumn = i;
minColumnSum = columnSum;
}
modifiedArr[row][i] = 0;
}
modifiedArr[row][minColumn] = originalArr[row][minColumn];
}
static int getColumnSum(int[][] arr, int column){
int sum = 0;
for (int i = 0; i<arr.length; i++){
for (int j = 0; j<arr[0].length; j++) {
if (j == column){
sum+=arr[i][j];
}
}
}
return sum;
}
public static void main(String[] args) {
int [][] tempArr = new int [5][3];
generateArray(tempArr);
System.out.println("Array before executing the algorithm : ");
printArray(tempArr);
System.out.println("Array after executing the algorithm : ");
printArray(algorithm(tempArr));
}
基本上,您从循环遍历行开始。每一行都被赋予set最低列方法,该方法循环遍历该行中的所有元素,并尝试以最小化列和的方式将它们放入修改的Arr中。对所有列这样做会给你答案。
我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]
为什么上面的代码不起作用,我应该如何纠正?
试图实施更大规模的井字游戏 这个游戏可以有超过3行和3列 每当发现4个连续的模式(水平,垂直或交叉) 选手是赢家 我已经找到了水平和垂直匹配的实现方法 但是找不到一种方法来识别2d数组中某个字符的交叉模式 考虑下面的二维数组 ` ` 如何检查“*”字符在这个2d数组中是否有四个连续的交叉模式
我试着做一个Loto游戏,我必须生成一张随机的卡,在第一个collum数字从1-9,第二个10-19一直到90。这张牌的另一个规则是,每行的随机位置上只能有5个数字,这就是我遇到的麻烦。 我从这个开始在每个collum中添加数字: 然后在数组的每一行的一个数字位置上放5个数字我试过这样做: 第三个也一样。 输出: 0 18 0 0 46 0 61 72 88 0 18 0 31 0 55 0 0
这段代码测试了一个标准的3×3tic tac toe游戏中的胜利。我的问题是,我如何改变里面的数字来匹配任何大小的棋盘,比如n×n? 目前,它检查第一行、第二行和第三行,以检查任何一个玩家是否在任何一行中获胜,接下来是列和对角线。但是,当板的大小更改为其他大小时,这将不再成立,因为它不会检查每一个可能的行/列/对角线。那么,对于尺寸为n×n的板,我该如何做到这一点。请不要代码,因为我不希望剽窃,但
所以,我正在尝试匹配 2 个不同的数组。如果相同的单元格匹配,我想使用 .slice 方法从一个数组中删除该单元格。 编辑:我想做的是从数组1中移除一个数字,如果数组2包含一个匹配的数字。代码现在的工作方式是只删除1个条目。我要删除第一个数组中的所有条目。 我尝试运行这个,在控制台日志下,array1没有变化。似乎拼接方法没有删除任何单元格。我搜索了SE,但没有找到任何可以帮助我的东西。