Назад | Начало урока | Вперед
Содержание

Глава 3

class Matrix


/** Program from Albert Volos May 2010
* (C) "Распознаватель Текста"
* Автор: Альберт Волос (e-mail: pick4you@yandex.ru)
* http://www.pick4you.narod.ru
*
**/
package javagently;

import java.io.*;
import java.text.*;
import java.lang.*;
import java.util.*;

//1. clearMatrix()
//2. funCopyDoubleListToMatrix(List<List<Character>> m)
//3. funCopyMatrixToDoubleList(List<List<Character>> m)
//4. funCopyMatrixToMatrix(Matrix m)
//5. funReverseMatrix()
//6. funShowMatrix(Stream fout)
//7. addFields()
//8. copyArayListToMatrix(List<Character> al, int length)
//9. getElement(int x, int y)
//10. getMatrixSizeY()
//11. getMatrixSizeX()
//12. funPustStr()
//13. funTurnMatrixVH()
//14. funTurnMatrixV()
//15. funCleanAboveStr() -очистить пустые строки сверху
//16. funContrast()
//17. funKey()
//18. funShowArrayList(List<Character> als, Stream fout)
//19. funShowArrayList2(List<String> als, Stream fout)
//20. funTypeStream to, Stream to2, Stream to3, Stream to4,
// List<String> strListKeyVert, List<String> strListKeyHoriz, List<String> strListAlfabet)

public class Matrix{

private List< List<Character> > matrix;
private int xSize = 0;

public Matrix() {

this.matrix = new ArrayList<List<Character>>();
}
public void setMatrix(List<List<Character>> matrix) {
this.matrix = matrix;
}
public List<List<Character>> getMatrix() {
return matrix;
}
//1
public void clearMatrix() {
matrix.clear();
}
//2
public List<List<Character>> funCopyDoubleListToMatrix(List<List<Character>> m) {
matrix.addAll(m);
return matrix;
}
//3
public List<List<Character>> funCopyMatrixToDoubleList(List<List<Character>> m) {
m.addAll(matrix);
return m;
}
//4
public List<List<Character>> funCopyMatrixToMatrix(Matrix m){
List<List<Character>> temp = new ArrayList<List<Character>>();
m.funCopyMatrixToDoubleList(temp);
matrix.addAll(temp);
return matrix;
}
//5
public void funReverseMatrix() {
Collections.reverse(matrix);
}
//6
public void funShowMatrix(Stream fout) {
for (List<Character> als1: this.getMatrix()) {
for (Character c: als1) {
fout.print(c);
}
fout.println("");
}
}
//7
public void addFields(Character[] cm) {
matrix.add(Arrays.asList(cm));
}
//8
public void copyArayListToMatrix(List<Character> al, int length) {
List<List<Character>> Field = new ArrayList<List<Character>>();
List<Character> Stroka = new ArrayList<Character>();
xSize = length;
for (int i =0; i < al.size(); i++) {
Stroka.add(al.get(i));
if (Stroka.size() == length) {
Field.add(Stroka);
for (int y = 0; y < Field.size(); y++) {
List<Character> Str = new ArrayList<Character>();
for (int x = 0; x < Field.get(0).size(); x++) {
Str.add(Field.get(y).get(x));
}
matrix.add(Str);
}
Stroka.clear();
Field.clear();
}
}
}//end fun
//9
public Character getElement(int x, int y) {
if (x >= 0 && x <= matrix.size() && y >=0 && y <= matrix.get(x).size()) {
return matrix.get(x).get(y);
}
else {
System.out.println("Don't found element.");
return null;
}
}
//10
public int getMatrixSizeY() {
return matrix.size();
}
//11
public int getMatrixSizeX() {
int index=0;
for (List<Character> als1: this.getMatrix()) {
for (Character c: als1) {
index++;
}
break;
}
return index;
}
//12
public List<Character> funPustStr() {
//Определяем эталон пустой строки
List<Character> charVecPustStr = new ArrayList<Character>(); //вектор для строки
List<Character> charVecCh = new ArrayList<Character>();
List<Character> charVecCh1 = new ArrayList<Character>();
charVecCh1.add(new Character('0'));
int kol_Null = 0;
for(int y = 0; y < 1; y++){
for(int x = (this.getMatrixSizeX() - 1); x > 1; x--){
charVecCh.add(this.getElement(y,x));
if(charVecCh.equals(charVecCh1)){
kol_Null++;
charVecCh.clear();
continue;
}
else{
for(int i = 0; i< xSize - kol_Null;i++)
charVecPustStr.add(new Character('F'));
//System.out.println("kol_Null " + kol_Null);
for(int q=0;q<kol_Null;q++){
charVecPustStr.add(new Character('0'));
}
kol_Null = 0;
charVecCh.clear();
break;
}
}
}
return charVecPustStr;
}//end fun
//13
public void funTurnMatrixVH(){
Matrix m = new Matrix();
m.setMatrix(new ArrayList<List<Character>>());
List<Character> charFieldVert = new ArrayList<Character>(); //вектор для строки
for (int x = 0; x < this.getMatrixSizeX(); x++) {
for (int y = 0; y < this.getMatrixSizeY(); y++) {
charFieldVert.add(this.getElement(y,x));
}
}
int temp = this.getMatrixSizeY();
//После того, как перевернули букву и положили ее набок сохраним
//результат в объекте Matrix
this.clearMatrix();
this.copyArayListToMatrix(charFieldVert, temp);
}//end fun
//14
public void funTurnMatrixV(){
Matrix FieldTemp = new Matrix();
FieldTemp.setMatrix(new ArrayList<List<Character>>());
this.funReverseMatrix();
FieldTemp.funCopyMatrixToMatrix(this);
this.clearMatrix();
this.funCopyMatrixToMatrix(FieldTemp);
}
//15
public void funCleanAboveStr(){
List<Character> Stroka = new ArrayList<Character>();

//Эталон пустой строки
List<Character> PustStroka = new ArrayList<Character>();
for(int i = 0; i < this.getMatrixSizeX();i++){

PustStroka.add(new Character('F'));
}
Matrix m = new Matrix();
m.setMatrix(new ArrayList<List<Character>>());
m.funCopyMatrixToMatrix(this);
this.clearMatrix();

boolean bul = false;
for (List<Character> als1: m.getMatrix()) {

for (Character c: als1) {
Stroka.add(c);
}
if(Stroka.equals(PustStroka)){
if(bul==true){
this.copyArayListToMatrix(Stroka, Stroka.size());
Stroka.clear();
}
else{
Stroka.clear();
}
}
else{
bul=true;
this.copyArayListToMatrix(Stroka, Stroka.size());
Stroka.clear();
}//end if..else
}//end for
}//end fun
//16
public void funContrast(){
List<Character> Bukva = new ArrayList<Character>();
List<Character> Stroka = new ArrayList<Character>(); //вектор для строки
List<Character> BukvaT = new ArrayList<Character>();
BukvaT.add(new Character('F'));
for (int y = 0; y < this.getMatrixSizeY(); y++) {
for (int x = 0; x < this.getMatrixSizeX(); x++) {
Bukva.add(this.getElement(y,x));
if(Bukva.equals(BukvaT)){
Stroka.add(new Character('F'));
}
else {
Stroka.add(new Character('0'));
}
Bukva.clear();
}
}
int temp = this.getMatrixSizeX();
this.clearMatrix();
this.copyArayListToMatrix(Stroka, temp);
}//end fun
//17
public String funKey(){
String kluch = "";
String strTemp = "";
String strTemp2 = "";
for(int y = 0; y < this.getMatrixSizeY(); y++){
for(int x = 0; x < this.getMatrixSizeX() ; x++){
strTemp = strTemp + this.getElement(y,x);
}//end for
//сравним две строки
if(strTemp.equals(strTemp2)){
//если равны, то новая итерация
strTemp = "";
continue;
}
strTemp2 = strTemp;//не равны, присвоим
char temp1 = '0';
boolean flag = false;

for(int i=0;i < strTemp2.length();i++){

char temp2 = strTemp2.charAt(i);
if(flag==false){
//первый символ в ключ
temp1=temp2;
kluch = kluch + temp1;
flag=true;
}
if(temp1 == temp2){
continue;
}
temp1=temp2;
kluch = kluch+temp1;
}//end for
kluch = kluch + "_"; strTemp = "";
}//end for
return kluch;
}//end fun
//18
public void funShowArrayList(List<Character> als, Stream fout) {
for (Character c: als) {
fout.print(c);
}
fout.println("");
}//end fun
//19
public void funShowArrayList2(List<String> als, Stream fout) {
for (String c: als) {
fout.println(c);
}
}//end fun
//20
public void funType(Stream to, Stream to2, Stream to3, Stream to4, List<String> strListKeyVert, List<String> strListKeyHoriz, List<String> strListAlfabet){

String temp = "";
String kluchVer = "";
String kluchHor = "";

//Очистим букву с четырех строн
this.funTurnMatrixVH(); //повернем набок
this.funCleanAboveStr();//очистим сверху
this.funTurnMatrixV(); //перевернем
this.funCleanAboveStr();//снова очистим сверху
this.funTurnMatrixV(); //перевернем в первоначальное положение
this.funContrast();
this.funShowMatrix(to4);//выведем Б-К в файл для контроля
to4.println("");

//ключ горизонтальный
kluchHor = this.funKey();
to3.println(kluchHor);

this.funTurnMatrixVH(); //повернем набок

//ключ вертикальный
kluchVer = this.funKey();
to2.println(kluchVer);

String ssVert = "";
for(int xV = 0; xV < strListKeyVert.size() ; xV++){

String strV = strListKeyVert.get(xV);
if(kluchVer.equals(strV)){
ssVert = strListAlfabet.get(xV);
break;
}
strV = "";
}
String ssHoriz = "";
for(int xH = 0; xH < strListKeyHoriz.size() ; xH++){
String strH = strListKeyHoriz.get(xH);
if(kluchHor.equals(strH)){
ssHoriz = strListAlfabet.get(xH);
break;
}
}
if( ssVert.equals(ssHoriz)){
to.print(ssHoriz);
}
else{
to.print(ssVert);
}
}//end fun

}//end class



Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz