Advertisement
IrinaIgnatova

Matrix Crossfire-remove elements from matrix

Oct 31st, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.42 KB | None | 0 0
  1. package com.company;
  2.  
  3.  
  4. import java.io.IOException;
  5.  
  6. import java.util.*;
  7. import java.util.stream.Collectors;
  8.  
  9.  
  10. public class Main {
  11.  
  12.  
  13.     public static void main(String[] args) {
  14.         Scanner scanner = new Scanner(System.in);
  15.  
  16.         int rows = scanner.nextInt();
  17.         int cols = scanner.nextInt();
  18.         scanner.nextLine();
  19.  
  20.         ArrayList<ArrayList<Integer>> matrix = generateMatrix(rows, cols);
  21.  
  22.         String input = scanner.nextLine();
  23.  
  24.         while (!input.equals("Nuke it from orbit")) {
  25.  
  26.             int[] tokens = Arrays.stream(input.split(" "))
  27.                     .mapToInt(Integer::parseInt)
  28.                     .toArray();
  29.  
  30.             int row = tokens[0];
  31.             int col = tokens[1];
  32.             int radius = tokens[2];
  33.  
  34.             for (int r = row - radius; r <= row + radius; r++) {// за елементите, които са в една колона, но на различни редове
  35.                 if (isInBounds(matrix, r, col)) {//трябва да внимаваме какви параметри подаваме на метода!!
  36.                     matrix.get(r).set(col, 0);// тук на текущия ред на текущия индекс на колона сетваме 0
  37.                 }
  38.  
  39.             }
  40.             for (int c = col - radius; c <= col + radius; c++) {//тук елементите са на един ред, но в различни колони
  41.                 if (isInBounds(matrix, row, c)) {//трябва да внимаваме какви параметри подаваме на метода!!
  42.                     matrix.get(row).set(c, 0);
  43.                 }
  44.             }
  45.             for (int r = 0; r < matrix.size(); r++) {
  46. //                matrix.set(r, matrix.get(r)//тук не затваряме скобата, за да може да филтрираме стойностите и да сетнем елементите без 0
  47. //                        .stream()
  48. //                        .filter(element -> element != 0)
  49. //                        .collect(Collectors.toCollection(ArrayList::new)));
  50.                 //или
  51.                 matrix.get(r).removeAll(new ArrayList<Integer>(){{add(0);}});
  52.  
  53.                 if (matrix.get(r).size() == 0) {
  54.                     matrix.remove(r);
  55.                     r--;
  56.                 }
  57.             }
  58.  
  59.  
  60.             input = scanner.nextLine();
  61.         }
  62.  
  63.         printMatrix(matrix);
  64.  
  65.     }
  66.  
  67.     private static boolean isInBounds(ArrayList<ArrayList<Integer>> matrix, int row, int col) {
  68.         return row >= 0 && row < matrix.size() && col >= 0 && col < matrix.get(row).size();
  69.     }
  70.  
  71.     private static void printMatrix(ArrayList<ArrayList<Integer>> matrix) {
  72.         for (int r = 0; r < matrix.size(); r++) {
  73.             for (int c = 0; c < matrix.get(r).size(); c++) {
  74.                 System.out.print(matrix.get(r).get(c) + " ");
  75.             }
  76.             System.out.println();
  77.         }
  78.     }
  79.  
  80.     private static ArrayList<ArrayList<Integer>> generateMatrix(int rows, int cols) {
  81.         ArrayList<ArrayList<Integer>> matrix = new ArrayList<>();
  82.  
  83.         int value = 1;
  84.         for (int r = 0; r < rows; r++) {
  85.             ArrayList<Integer> row = new ArrayList<>();
  86.             for (int c = 0; c < cols; c++) {
  87.                 row.add(value);
  88.                 value++;
  89.             }
  90.             matrix.add(row);
  91.         }
  92.         return matrix;
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement