2012-12-11 30 views
0

我得到了例如二維表格3x2,其中所有元素都有4x減號:「----」。如果我在程序中編寫例如32.第一個數字告訴我們它是什麼數字,第二個數字是第幾個數字。在二維表中添加數字

它會讓我的表是這樣的(32):

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

然後,當我們寫另一個(53):它會檢查表[0] [0],如果它是空的,如果它是如果兩者都是空的,它將被檢查table [1] [0]和table [0] [1],在這種情況下table [0] [1]將選擇表號碼較小的表。

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

那裏,我們可以把其它號碼:

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

我們插入空的地方 - 數量在所有地方是不是空的,我們插入號那裏有 即是多「 - 」符號 - 我們拿號42和33--改變它在3344

33-- 555-  3344 555- 
444- 22-- -> 444- 22-- 
333- 222-  333- 222- 
如果我們想在地方插入更多數量

哪裏是不夠的「 - 」 - 程序結束

我開始是這樣的:

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

這只是一個尋找最佳空閒插槽和插入的問題。你可能會發現,將三維數組,而不是二維數組想象得更容易。

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