Vanya_Shestakov

Magic square

Oct 3rd, 2020 (edited)
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.05 KB | None | 0 0
  1. package com.company;
  2. import java.util.Scanner;
  3. public class Main {
  4.  
  5.     public static int inputOrder() {
  6.         Scanner scan = new Scanner(System.in);
  7.         int order = 0;
  8.         boolean isIncorrect;
  9.  
  10.         System.out.println("Введите порядок матрицы (от 2 до 6)");
  11.         do {
  12.             isIncorrect = false;
  13.             try {
  14.                 order = Integer.parseInt(scan.nextLine());
  15.             } catch (Exception e) {
  16.                 System.out.println("Введите целое число!");
  17.                 isIncorrect = true;
  18.             }
  19.  
  20.             if (isIncorrect == false && (order < 2 || order > 6)) {
  21.                 System.out.println("Некорректные данные. Введите длину из указанного диапазона");
  22.                 isIncorrect = true;
  23.             }
  24.         } while (isIncorrect);
  25.         return order;
  26.     }
  27.  
  28.     public static void inputMatrix(int[][] matrix){
  29.         Scanner scan = new Scanner(System.in);
  30.         boolean isIncorrect;
  31.  
  32.         for (int i = 0; i < matrix.length; i++){
  33.             for (int j = 0; j < matrix.length; j++){
  34.                 do {
  35.                     System.out.println("Введите элемент матрицы а" + (i + 1) + (j + 1));
  36.                     try {
  37.                         isIncorrect = false;
  38.                         matrix[i][j] = Integer.parseInt(scan.nextLine());
  39.                     }catch (Exception e){
  40.                         System.out.println("Введите натуральное число!");
  41.                         isIncorrect = true;
  42.                     }
  43.  
  44.                     if (isIncorrect == false && matrix[i][j] < 1){
  45.                         System.out.println("Введите натуральное число!");
  46.                         isIncorrect = true;
  47.                     }
  48.                 }while (isIncorrect);
  49.             }
  50.         }
  51.  
  52.     }
  53.  
  54.     public static void printMatrix(int[][] matrix){
  55.         System.out.print("Ваша матрица:");
  56.         for (int i = 0; i < matrix.length; i++){
  57.             System.out.println();
  58.             for (int j = 0; j < matrix.length; j++){
  59.                 System.out.print(matrix[i][j] + "  ");
  60.             }
  61.         }
  62.         System.out.println();
  63.     }
  64.  
  65.     public static void calcSumStrings(int[][] matrix, int[] sumStrings){
  66.         int sum;
  67.         for (int i = 0; i < matrix.length; i++){
  68.             sum = 0;
  69.             for (int j = 0; j < matrix.length; j++){
  70.                 sum += matrix[i][j];
  71.                 sumStrings[i] = sum;
  72.             }
  73.         }
  74.     }
  75.  
  76.     public static void calcSumColumns(int[][] matrix, int[] sumColumns){
  77.         int sum;
  78.         for (int j = 0; j < matrix.length; j++){
  79.             sum = 0;
  80.             for (int i = 0; i < matrix.length; i++){
  81.                 sum += matrix[i][j];
  82.                 sumColumns[j] = sum;
  83.             }
  84.         }
  85.     }
  86.  
  87.     public static int calcSumMainDiagonal(int[][] matrix){
  88.         int sum = 0;
  89.         for (int i = 0; i < matrix.length; i++){
  90.             sum += matrix[i][i];
  91.         }
  92.         return sum;
  93.     }
  94.  
  95.     public static int calcSumSelfDiagonal(int[][] matrix){
  96.         int sum = 0;
  97.         for (int i = 0; i < matrix.length; i++){
  98.             sum += matrix[i][(matrix.length - 1) - i];
  99.         }
  100.         return sum;
  101.     }
  102.  
  103.     public static void checkMagicSquare(int mainDiagonal, int selfDiagonal, int[] sumStrings, int[] sumColumns){
  104.         boolean equal = true;
  105.         int i = 0;
  106.         while (i < sumStrings.length && equal){
  107.             if (mainDiagonal == selfDiagonal && mainDiagonal == sumStrings[i] && mainDiagonal == sumColumns[i]){
  108.                 equal = true;
  109.             }else {
  110.                 equal = false;
  111.                 System.out.println("Данная матрица НЕ ЯВЛЯЕТСЯ магическим квадратом");
  112.             }
  113.             i++;
  114.         }
  115.  
  116.         if (equal){
  117.             System.out.println("Данная матрица ЯВЛЯЕТСЯ магическим квадратом");
  118.         }
  119.     }
  120.  
  121.     public static void main(String[] args) {
  122.     System.out.println("Дана квадратная матрица А порядка n.\nПрограмма проверяет, равны ли суммы элементов матрицы по строкам, \nстолбцам, главной и побочной диагоналям между собой, \nт.е. является ли матрица магическим квадратом.\n" );
  123.  
  124.         int order = inputOrder();
  125.         int[][] matrix = new int[order][order];
  126.         inputMatrix(matrix);
  127.         printMatrix(matrix);
  128.  
  129.  
  130.         int[] sumStrings = new int[order];
  131.         calcSumStrings(matrix, sumStrings);
  132.  
  133.         int[] sumColumns = new int[order];
  134.         calcSumColumns(matrix, sumColumns);
  135.  
  136.         int mainDiagonal = calcSumMainDiagonal(matrix);
  137.         int selfDiagonal = calcSumSelfDiagonal(matrix);
  138.  
  139.         checkMagicSquare(mainDiagonal,selfDiagonal,sumStrings,sumColumns);
  140.     }
  141. }
Add Comment
Please, Sign In to add comment