Java 求二维数组的和
我正在进行一个项目,在这个项目中,我必须读取一个文件并将内容输入到二维数组中。然后我必须求和矩阵的每行、每列和周长。到目前为止,我所有的东西都在工作,除了外围。我正在尝试为顶行、底行和两个外部列的中间创建单独的for循环 矩阵文件如下所示:Java 求二维数组的和,java,matrix,multidimensional-array,Java,Matrix,Multidimensional Array,我正在进行一个项目,在这个项目中,我必须读取一个文件并将内容输入到二维数组中。然后我必须求和矩阵的每行、每列和周长。到目前为止,我所有的东西都在工作,除了外围。我正在尝试为顶行、底行和两个外部列的中间创建单独的for循环 矩阵文件如下所示: 1 2 3 4 2 4 6 8 2 4 6 8 3 2 3 4 因此,周长加起来应该是42。 现在我可以成功地将第一行和最后一行相加为等于22。然而,当我把这些列加到总数中时,我得到了32列 代码如下: import java.util.*; //
1 2 3 4
2 4 6 8
2 4 6 8
3 2 3 4
因此,周长加起来应该是42。
现在我可以成功地将第一行和最后一行相加为等于22。然而,当我把这些列加到总数中时,我得到了32列
代码如下:
import java.util.*; // Scanner class
import java.io.*; // File class
public class Lab10
{
static public void main( String [ ] args ) throws Exception
{
if ( args.length != 1 )
{
System.out.println("Error -- usage is: java Lab10 matdataN.txt");
System.exit( 0 );
}
//Requirement #1: first int value: # of rows, second int value: # of cols
File newFile = new File(args[0]);
Scanner in = new Scanner(newFile);
int numRows = in.nextInt();
int numCols = in.nextInt();
//Requirement #2: declare two-d array of ints
int[][] matrix;
matrix = new int[numRows][numCols];
//Requirement #3 & 4: read file one line at a time (nested for loops
//and nextInt()) and print
for (int i = 0; i < numRows; i++)
{
for (int j = 0; j < numCols; j++)
{
matrix[i][j] = in.nextInt();
System.out.print(matrix[i][j]+ " ");
}
System.out.println();
}
//Requirement #5: traverse each row and sum the values and display the sums
int rowTotal = 0;
for (int i = 0; i < numRows; i++)
{
rowTotal = 0;
for (int j = 0; j < numCols; j++)
{
rowTotal += matrix[i][j];
}
System.out.println("Sum for row = " + rowTotal);
}
//Requirement #6: traverse each column and sum the values and display the sums
int colTotal = 0;
for (int i = 0; i < numRows; i++)
{
colTotal = 0;
for (int j = 0; j < numCols; j++)
{
colTotal += matrix[j][i];
}
System.out.println("Sum for col = " + colTotal);
}
//Requirement #7: traverse the perimeter and sum the values and display the sum
//sum bottom row matrix
int perTotal = 0;
for (int i = (numRows-1); i < numRows; i++)
{
perTotal = 0;
for (int j = 0; j < numCols; j++)
{
perTotal += matrix[i][j];
}
}
//sum + top row matrix
for (int i = 0; i < numRows - (numRows-1); i++)
{
for (int j = 0; j < numCols; j++)
{
perTotal += matrix[i][j];
}
System.out.println("Sum of perimeter = " + perTotal);
}
// sum + first col middle
for (int i = 1; i < (numRows-1); i++)
{
for (int j = 0; j < numCols - (numCols-1); j++)
{
perTotal += matrix[j][i];
}
System.out.println("Sum = " + perTotal);
}
// sum + last col middle
for (int i = 1; i < (numRows-1); i++)
{
for (int j = (numCols-1); j < numCols; j++)
{
perTotal += matrix[j][i];
}
System.out.println(perTotal);
}
}
import java.util.*;//扫描器类
导入java.io.*;//文件类
公共类Lab10
{
静态公共void main(字符串[]args)引发异常
{
如果(args.length!=1)
{
println(“错误——用法是:javalab10 matdataN.txt”);
系统出口(0);
}
//需求#1:第一个int值:#行,第二个int值:#列
File newFile=新文件(args[0]);
扫描仪输入=新扫描仪(新文件);
int numRows=in.nextInt();
int numCols=in.nextInt();
//要求#2:声明整数的二维数组
int[][]矩阵;
矩阵=新整数[numRows][numCols];
//要求#3和4:一次读取一行文件(嵌套循环
//和nextInt())并打印
对于(int i=0;i
如果有人能帮我计算第一列和最后一列的中间值(应该是2+2和8+8),或者如果你有更好的方法来计算周长,我将不胜感激。提前感谢!//要求#7:遍历周长并求和值,然后显示总和
//Requirement #7: traverse the perimeter and sum the values and display the sum
int perTotal = 0;
// First line
for (int j = 0; j < numCols; j++)
{
perTotal += matrix[0][j];
}
// If there is only one line, then it is done.
if (numRows > 1)
{
// Last line
for (int j = 0; j < numCols; j++)
{
perTotal += matrix[numRows-1][j];
}
// Other lines
for (int i = 1; i < numRows -1); i++)
{
perTotal += matrix[i][0] + matrix[i][numcols -1];
}
}
//Perimeter
System.out.println("Perimter="+perTotal);
int perTotal=0;
//一线
对于(int j=0;j1)
{
//最后一行
对于(int j=0;j
我建议您这样做:
int perTotal = 0;
// top and bottom row
for (int c = 0; c < numCols; c++)
perTotal += matrix[0][c] + matrix[numRows-1][c];
// left and right column
for (int r = 1; r < numRows-1; r++)
perTotal += matrix[r][0] + matrix[r][numCols-1];
// output
System.out.println("Perimeter=" + perTotal);
int perTotal=0;
//上排和下排
for(int c=0;c
以下是您的方法:
public static int perimeter(int[][] array) {
int perimter = 0;
for (int i = 0; i < array[0].length; i++) {
perimter += array[0][i] + array[array.length - 1][i];
}
for (int r = 1; r < array.length - 1; r++) {
perimter += array[r][0] + array[r][array[0].length - 1];
}
return perimter;
}
公共静态int周长(int[][]数组){
int perimter=0;
对于(int i=0;i
下面是您对所提供阵列的测试:
公共静态void main(字符串[]args){
println(周长(新的int[][{{1,2,2,3},{2,4,4,2},{3,6,3},{4,8,8,4}));
}
输出:42非常感谢大家!这是一种更简单的方法。仅供参考:我最终做到了
int perTotal = 0;
for (int i = 0; i < numCols; i++)
{
perTotal += matrix[0][i] + matrix[numRows-1][i];
}
for (int j = 1; j < numRows-1; j++)
{
perTotal += matrix[j][0] + matrix[j][numCols-1];
}
System.out.println("Perimeter = " + perTotal);
int perTotal=0;
对于(int i=0;i
在0.4.0版本中有一个(Java线性代数)库处理此任务(目前可在GitHub:上提供,今年夏天将在Maven上提供)。因此,下面是一个简单的示例:
Matrix a = new Basic2DMatrix(...); // creates a real matrix
// calculates the sum of '1' row
double d1 = a.foldRow(1, Matrices.asSumAccumulator(0));
// calculates the sum of '2'
double d2 = a.foldColumn(2, Matrices.asSumAccumulator(0));
// the helper class that fetches border elements of matrix
class PerimeterFetcher implements MatrixFunction {
private int rows;
private int columns;
public PerimeterFectcher(int rows, int columns) {
this.rows = rows;
this.columns = columns;
}
@Override
public double evaluate(int i, int j, double value) {
return i == 0 ? value : j == 0 ? value : (i + 1) == rows ? value
: (j + 1) == columns ? value : 0;
}
}
// calculates the perimeter of matrix
double p = a.fold(Matrices.asSumFunctionAccumulator(0,
new PerimeterFetcher(a.rows(), a.columns())));
UPD:la4j的下一版本(0.4.5)支持矩阵和向量的sum()
方法:
Matrix a = new Basic2DMatrix(...);
double s = a.sum(); // wrapper around a.fold(...);
只要这样做:
for (int i = 0; i < ROWS; i++){
for (int j = 0; j < COLUMNS; j++){
sum = sum + myArray[i][j];
}
}
System.out.print(sum);
for(int i=0;iimport java.util.Scanner;
public class TwoDarray {
public static void main(String[] args)
{
Scanner scn=new Scanner(System.in);
System.out.print("Enter the first Rows of Array :"); //Input first Rows and Columns
int row1 = scn.nextInt();
System.out.print("Enter the first columns of Array:");
int col1 = scn.nextInt();
System.out.print("Enter the second Rows of Array :"); //Input second rows and column
int row2 = scn.nextInt();
System.out.print("Enter the second columns of Array:");
int col2 = scn.nextInt();
int arr1[][] = new int[row1][col1]; // Input the elements in first row and column
System.out.println("Enter the elements in First row and column");
for(int i=0;i<row1;i++)
{
for(int j=0;j<col1;j++)
{
arr1[i][j]=scn.nextInt();
}
}
int arr2[][] = new int[row2][col2]; // Input the elements in second row and column
System.out.println("Enter the elements in second row and column");
for(int i=0;i<row2;i++)
{
for(int j=0;j<col2;j++)
{
arr2[i][j]=scn.nextInt();
}
}
System.out.println("Output of first row and column is "); //output of first row and column
for(int i=0;i<row1;i++)
{
for(int j=0;j<col1;j++)
{
System.out.print(arr1[i][j]+" ");
} System.out.println();
}
System.out.println("output of secound row and column"); //out put of second row and column
for(int i=0;i<row2;i++)
{
for(int j=0;j<col2;j++)
{
System.out.print(arr2[i][j]+" ");
} System.out.println();
}
//sum of first and second row and column
int sum[][] = new int[row1][col1];
for(int i=0;i<row1;i++)
{
for(int j=0;j<col1;j++)
{
sum[i][j]=arr1[i][j]+arr2[i][j];
}
}
System.out.println("sum of two matrix output"); //sum of two matrix output
for(int i=0;i<row1;i++)
{
for(int j=0;j<col1;j++)
{
System.out.print(sum[i][j]+" ");
} System.out.println();
}
}
}
static int sumMultiArray(int[][] array) {
int sum = 0;
for (int[] ints : array) {
for (int number : ints) {
sum += number;
}
}
return sum;
private static int sumElementInArray(int[][] arrayWithElement) {
int sum = 0;
for (int i = 0; i < arrayWithElement.length; i++) {
sum += IntStream.of(arrayWithElement[i]).sum();
}
return sum;
}