trouver la somme de deux dimensions de la matrice de java
Je suis en train de travailler sur un projet où je dois lire un fichier et saisissez le contenu dans un tableau 2D. Puis j'ai de la somme de chaque ligne, chaque colonne, et le périmètre de la matrice. J'ai tout qui fonctionne jusqu'à présent, sauf le périmètre. Je suis en train de créer des boucles for pour la rangée du haut, du bas de ligne, et le moyen de les deux à l'extérieur colonnes.
La matrice fichier ressemble à ceci:
1 2 3 4
2 4 6 8
2 4 6 8
3 2 3 4
Donc le périmètre devrait ajouter jusqu'à 42.
Droit maintenant, je peux ajouter avec succès la première ligne et la dernière ligne de l'égalité des 22. Cependant, lorsque j'ajoute les colonnes pour que le total-je obtenir 32.
Voici le code:
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);
}
}
Je serais hugeeeeeely reconnaissante si quelqu'un pouvait m'aider à me total le milieu de la première et de la dernière colonne (devrait être de 2+2 8+8). Ou si vous avez une meilleure façon de trouver le périmètre. Merci à l'avance!
- Vous avez fait tout trop compliqué. Vous n'avez pas besoin de deux boucles for pour compter juste une ligne/colonne. En fait chaque fois que l'un de vos boucles for ne fait qu'une seule itération. Donc, si vous savez que pour la boucle va faire juste une itération, correctif de valeur et de ne pas utiliser de boucle for
Vous devez vous connecter pour publier un commentaire.
Je vous conseille de vous le faire de cette façon:
Ici est votre méthode:
Et voici ton test avec le tableau que vous avez fournies :
De sortie : 42
Il y a un la4j (Algèbre Linéaire pour Java) la bibliothèque qui gère cette tâche en version 0.4.0 (actuellement disponible sur GitHub: https://github.com/vkostyukov/la4j, sera disponible à Maven cet été). Donc, voici le bref exemple:
UPD: La prochaine version de la4j (0.4.5) prend en charge
sum()
méthode pour les matrices et vecteurs:Viens de le faire:
Cela devrait vous donner la somme.
merci beaucoup à vous tous! tel un moyen plus simple de le faire. pour info: j'ai fini par faire
Essayez ce qui suit: