2012-12-11 5 views
0

예를 들어 모든 요소에 4x 빼기가있는 2 차원 테이블 3x2가 있습니다. "----". 예를 들어 32 번 프로그램에 글을 쓰면 첫 번째 숫자는 숫자가 무엇인지, 두 번째 숫자는 연속적으로 나타납니다.2 차원 테이블에 숫자 추가

가이처럼 내 테이블 (32)하게됩니다

: 다음

---- ----  33-- ---- 
---- ---- -> ---- ---- 
---- ----  ---- ---- 

을 우리는 또 다른 하나 (53) 쓸 때 :이 표를 확인됩니다 [0] [0] 비어하고 있는지 경우 두 테이블 모두 비어 있으면 테이블 [1] [0]과 테이블 [0] [1]이 아닌 테이블 [0] [1]을 선택합니다. 이

33-- ----  33-- 555- 
---- ---- -> ---- ---- 
---- ----  ---- ---- 

우리는 다른 숫자를 넣을 수 있습니다 :

33-- 555-  33-- 555- 
---- ---- -> 444- 22-- 
---- ----  333- 222- 

우리가 빈 장소 -에 번호를 삽입 모든 곳이 비어 있지 더 여기서 우리가 숫자가 삽입 할 때 "-"기호 - 우리가 숫자를 취할 42 33-- 변화가

33-- 555-  3344 555- 
444- 22-- -> 444- 22-- 
333- 222-  333- 222- 

우리가 장소에서 더 많은 수를 삽입하려면 3344에 충분하지 않다가 "-"-이 프로그램은

을 종료3210

나는 다음과 같이 시작 :

import java.util.Scanner; 
import java.lang.Math.*; 

public class Skladisce2 
{ 
    public static int dolzina; 
    public static int sirina; 
    public static int enote; 
    public static int tabela[][][]; 
     //////////////////////////////////// 
     //// PREGLED VRSTIC 
     //////////////////////////////////// 

    public static boolean Vstavi(int barva, int visina) { 
       int pozdolzina = 0; 
       int pozsirina = 0; 
       int najbolProsto = 0; 
        for(int j=0; j<dolzina; j++) { 
         for(int i=0; i<sirina; i++) { 
          int prosto=0; 
          for(int k=0;k<enote;k++) { 
           if(tabela[j][i][k]==0){ 
           prosto++; 


           } 
           if(prosto>najbolProsto) { 
           pozdolzina = i; 
           pozsirina = j; 
           najbolProsto = prosto; 

           for (int l=enote-najbolProsto; ((l<enote) &&(visina>0)); l++) { 
            tabela[pozdolzina][pozsirina][l] = barva; 


            visina--;} 
            continue; 


       }k++; 

          } 
         } 

        } 

       return true; 
     } 

     ///////////////////////////////////// 
     //// IZPIS TABELE 
     ////////////////////////////////////// 
     public static void Izpis() { 
      for (int i=0; i<dolzina; i++){ 
       for (int j=0; j<sirina; j++){ 
        for (int k=0; k<enote; k++) { 
         if(tabela[i][j][k] == 0) { 
          System.out.print("-"); 
          } 
         else{ 
          System.out.print(tabela[i][j][k]); 
          } 
        } 
        System.out.print(" "); 
       } 
       System.out.println(); 
      } 

     } 

    public static void main (String[] args) { 

     Scanner vnos_stevila = new Scanner(System.in); 
     System.out.print("Insert dimension: "); 
     int vnos = vnos_stevila.nextInt(); 

     // int vnos razdeli na podenote - prva številka je dolžina, druga širina in tretja enota 
     dolzina = Integer.parseInt(Integer.toString(vnos).substring(0,1)); 
     sirina = Integer.parseInt(Integer.toString(vnos).substring(1,2)); 
     enote = Integer.parseInt(Integer.toString(vnos).substring(2,3)); 

     // izpis tabele s črtami 
     tabela= new int[dolzina][sirina][enote]; 

      // izriše črtice 
      Izpis(); 



      // VPIS SODOV 
     while (true){ 
      System.out.print("Insert color and number"); 
      int sod = vnos_stevila.nextInt(); 
      int dolzinaIzpisa = (int)(Math.log10(sod)+1); 



      int barva = Integer.parseInt(Integer.toString(sod).substring(0,1)); 
      int visina = Integer.parseInt(Integer.toString(sod).substring(1,2)); 

      Vstavi(barva,visina); 

      Izpis(); 
      }} 
} 

하지만 숫자 32을 삽입 할 때 쓰기 :

33-- 33--  
33-- 33-- 
33-- 33--  

어떻게 가장 낮은 테이블을 확인하고 번호를 삽입합니다 프로그램을 만들 수 있습니까?

+0

숙제가 있습니까? – aglassman

답변

0

단순히 가장 좋은 빈 슬롯을 찾고 거기에 삽입하는 것입니다. 또한 2 차원 배열이 아닌 3 차원 배열로 생각한 것이 더 쉽습니다.

import java.io.Console; 


public class ArrayDemo { 
private final int sizeX, sizeY, sizeZ; 
private final int[][][] values; 

public ArrayDemo() { 
    this(2,3,4); 
} 

public ArrayDemo(int x, int y, int z) { 
    values = new int[x][y][z]; 
    sizeX = x; 
    sizeY = y; 
    sizeZ = z; 

    for(int i=0;i<x;i++) { 
     for(int j=0;j<y;j++) { 
      for(int k=0;k<z;k++) { 
       values[i][j][k]=-1; 
      } 
     } 
    } 
} 

public boolean insert(int value, int count) { 
    // find first slot with enough room 
    int posX = -1; 
    int posY = -1; 
    int bestFree = 0; 

    // locate largest available slot 
    for(int j=0;j<sizeY;j++) { 
     for(int i=0;i<sizeX;i++) { 
      int free=0; 
      for(int k=0;k<sizeZ;k++) { 
       if(values[i][j][k]==-1) free++; 
      } 
      if(free>bestFree) { 
       posX = i; 
       posY = j; 
       bestFree = free; 
      } 
     } 
    } 

    // did we find a slot? 
    if(bestFree<count) return false; 

    // found slot, insert data 
    for(int k=sizeZ-bestFree;(k<sizeZ) && (count>0);k++) { 
     values[posX][posY][k] = value; 
     count--; 
    } 
    return true; 
} 


public String toString() { 
    StringBuilder buf = new StringBuilder(); 
    for(int j=0;j<sizeY;j++) { 
     for(int i=0;i<sizeX;i++) { 
      if(i>0) buf.append(' '); 
      for(int k=0;k<sizeZ;k++) { 
       if(values[i][j][k]==-1) { 
        buf.append('-'); 
       } else { 
        buf.append(Character.forDigit(values[i][j][k], 36)); 
       } 
      } 
     } 
     buf.append('\n'); 
    } 
    return buf.toString(); 
} 


public static void main(String[] args) { 
    ArrayDemo array = new ArrayDemo(); 
    Console cons = System.console(); 
    while(true) { 
     String in = cons.readLine(); 
     in = in.trim(); 
     if(in.length() != 2) { 
      cons.printf("Please supply two digits: value and number\n"); 
      continue; 
     } 
     int inputVal = Character.digit(in.charAt(0),36); 
     int inputNum = Character.digit(in.charAt(1),36); 
     if(inputVal==-1 || inputNum==-1) { 
      cons.printf("Please supply two digits: value and number\n"); 
      continue; 
     } 

     if(array.insert(inputVal,inputNum)) { 
      cons.printf("Data inserted OK\n%s\n", array.toString()); 
     } else { 
      cons.printf("Data could not be inserted. Finished. Final array is:\n\n%s\n",array.toString()); 
      return; 
     } 
    } 
} 
} 
+0

내가 3 * 3 테이블에서 그것을 바꿀 때 문제가 생겼다. 비어있는 장소 덕분에 체크 대각선으로 가야만한다. – user1892867