자바로 알고리즘을 구성하였음.

import java.util.Arrays;

class Data {
    // 클래스변수 보호차원에서 private 선언
    private int data; 
    Data() { data=1; } // 초기 데이터값을 1로 set
    public void set() { data+=1; } // 데이터를 증가시킨다.
    public int get() { return data; } // 데이터를 리턴한다.
}

class DataManager {

    // i는 디스크 선택, j는 해당디스크의 배열값 선택
    private int i, j; 
    private Data data;

    // 디스크 수, 디스크배열, Data객체
    void set(int DiskNum, int[][] disk, Data data_) {

        // 초기값 설정
        i = 0;   
        j = DiskNum-1;
        this.data = data_;

        while(i<=2*(DiskNum-1)) {
            int y=j;
            for(int a=0; a<DiskNum; a++) {
                int x=0;
                for(int b=i; b<j; b++) {
                    // 데이터 삽입
                    disk[a][b] = data.get();
    
                    // 복수개의 디스크에 데이터 백업
                    // 데이터가 현재 DISK의 값이면 다음 DISK로
                    if(a==x) x++;
                   
                    // 데이터가 비어있으면 데이터 저장
                    if(disk[x][y]==0) {  
                        disk[x][y]=data.get();
                        x++;
                    }
                    // 다음 저장할 위치를 위해 증가
                   
                    // 데이터가 존재하면 배열위치를 증가
                    else {     
                        y++;
                        disk[x][y]=data.get();
                        x++;
                    }
                    // 다음데이터 set
                    data.set();    
                }
            }
            // 다음 single disk 위치 선택
            i += 2*(DiskNum-1);   
            // 다음 복수개의 데이터 저장위치 선택
            j += 2*(DiskNum-1);   
        }
    }
}

public class SMDA {
    public static void main(String args[]) {
    // 인수값 받아들인다.
    int DiskNum = Integer.parseInt(args[0]);
        try {
            // 2이하의 값을 입력시 에러를 출력한다.
            if(DiskNum <=2) {
            throw new ArrayIndexOutOfBoundsException("2 이상의 값을 넣으세요");
            }
           
            int disk[][] = new int[DiskNum][];
           
            // Data객체 생성
            Data data = new Data();   

            for(int i=0; i<DiskNum; i++) {
                // disk마다 배열공간 set
                disk[i] = new int[4*(DiskNum-1)];  
               
                // 배열공간을 초기화
                Arrays.fill(disk[i], 0);
            }

            // DataManager객체 생성
            DataManager DM = new DataManager(); 
            // 데이터 삽입 및 복수디스크에 데이터 생성
            DM.set(DiskNum, disk, data);  
            // DISK의 내용 출력
            Print(DiskNum, disk); 

        }
        catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e);
        }
    }

    // DISK 내용 출력 메소드
    static void Print(int DiskNum, int[][] disk) {
        System.out.println("RAID Type : SMDA,  Disk number is " +DiskNum+ "." );
        for(int i=0; i<DiskNum; i++) {  //
            System.out.print("Disk["+i+"] : ");
            for(int j=0; j<4*(DiskNum-1); j++){
                System.out.print("\t" + disk[i][j]);
            }
        System.out.println();
        }
    }
}

+ Recent posts