В Java я должен проверить, является ли данная матрица латинским квадратом или нет
Мой учитель дал нам матрицу, и мы должны написать код, который проверяет, является ли это латинским квадратом или нет. У меня есть все части, но я не могу привести их в порядок, чтобы они работали. это то, что она дала нам, чтобы прочитать созданную ею матрицу.
Текстовый файл - matrix.txt, вот что он содержит.
3
1 2 3
3 1 2
2 3 1
Как вы можете видеть, это латинский квадрат, однако она сказала, что мы можем изменить матрицу, чтобы убедиться, что она работает с другими проблемами, которые она нам поставила.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Multidim {
public static void main(String args[]){
int matrix[][] = initMatrix();
//printData(matrix); //Uncomment to print array
/////YOUR MAIN CODE HERE/////
}
///PLACE YOUR METHODS HERE
public static int[][] initMatrix(){
int matrix[][];
Scanner filein = null;
try {
filein = new Scanner(new File("matrix.txt"));
int numRows = Integer.parseInt(filein.nextLine());
matrix = new int[numRows][];
parseData(matrix, filein);
filein.close();
return matrix;
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
if(filein != null)
filein.close();
return null;
}
}
public static void parseData(int matrix[][], Scanner in){
for(int r = 0; r < matrix.length; r++){
String splitLine[] = in.nextLine().split(" ");
matrix[r] = new int[splitLine.length];
for(int c = 0; c < matrix[r].length; c++){
matrix[r][c] = Integer.parseInt(splitLine[c]);
}
}
}
public static void printData(int matrix[][]){
for(int r = 0; r < matrix.length; r++){
for(int c = 0; c < matrix[r].length; c++){
System.out.print(matrix[r][c] + " ");
}
System.out.println();
}
}
}
Это код, который у меня есть в настоящее время. Куда это идет?
public static boolean LatinSquare(int[][]array) {
for(int i=0;i<array.length;i++) {
for(int j=0; j<array[i].length; j++) {
if(i!=j) {
return false;
}
}
}
return true;
}
public boolean DuplicatesInRows(int[][]array) {
for (int i=0; i<array.length; i++) {
for (int j=0;j<array[i].length; j++) {
int num=array[i][j];
for(int col =j+1; col<array.length; col++) {
if(num==array[i][col]) {
return true;
}
}
}
}
return false;
}
public boolean DuplicatesInCol(int[][]array) {
for(int i=0;i<array.length; i++) {
for(int j=0; j<array.length; j++) {
for(int k=1; k<array.length; k++) {
if (array[i][j+k]==array[i][j]) {
if (array[i][j]!=0) {
return true;
}
}
}
}
}
return false;
}
И я понятия не имею, куда это идет...
if(LatinSquare(matrix)==false)
System.out.println("This is not a Latin Square");
else
System.out.println("This is a Latin Square");
1 ответ
Вот как бы я это сделал
Multidim.java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Multidim
{
public static void main(String args[])
{
int matrix[][] = initMatrix();
// printData(matrix); //Uncomment to print array
if(latinSquare(matrix))
{
System.out.println("This is a Latin Square");
}
else
{
System.out.println("This is not a Latin Square");
}
}
public static boolean latinSquare(int[][] array)
{
for (int i = 0; i<array.length ;i++)
{
// check for duplicates in each row
if(duplicates(array[i]))
{
return false;
}
// create a column array
int[] column = new int[array[i].length];
for(int j = 0; j<array.length; j++)
{
column[j] = array[j][i]; // could throw an exception if the input file isn't square 3x3, 2x2, 4x4, etc
}
// check for duplicates in each column
if(duplicates(column))
{
return false;
}
}
return true;
}
public static boolean duplicates(int[] array)
{
for (int i = 0; i<array.length; i++)
{
for(int j = 0; j<array.length; j++)
{
if (i != j && array[i] == array[j])
{
return true;
}
}
}
return false;
}
///PLACE YOUR METHODS HERE
public static int[][] initMatrix()
{
int matrix[][];
Scanner filein = null;
try
{
filein = new Scanner(new File("matrix.txt"));
int numRows = Integer.parseInt(filein.nextLine());
matrix = new int[numRows][];
parseData(matrix, filein);
filein.close();
return matrix;
}
catch (FileNotFoundException e)
{
System.out.println(e.getMessage());
if(filein != null)
{
filein.close();
}
return null;
}
}
public static void parseData(int matrix[][], Scanner in)
{
for(int r = 0; r < matrix.length; r++)
{
String splitLine[] = in.nextLine().split(" ");
matrix[r] = new int[splitLine.length];
for(int c = 0; c < matrix[r].length; c++)
{
matrix[r][c] = Integer.parseInt(splitLine[c]);
}
}
}
public static void printData(int matrix[][])
{
for(int r = 0; r < matrix.length; r++)
{
for(int c = 0; c < matrix[r].length; c++)
{
System.out.print(matrix[r][c] + " ");
}
System.out.println();
}
}
}
matrix.txt
3
1 2 3
3 1 2
2 3 1
Обратите внимание, что ваши методы должны следовать соглашениям кода Oracle
Методы должны быть глаголами, в смешанном регистре с первой буквой в нижнем регистре, причем первая буква каждого внутреннего слова пишется с большой буквы.
Вот почему я изменился LatinSquare
в latinSquare