Копирование части массива в другую - Java - PullRequest
0 голосов
/ 22 марта 2012

У меня все еще есть проблемы с копированием части одного массива в другой.Я пытаюсь проверить содержимое массива, чтобы убедиться, что все работает, но все выводится на ноль.Сначала я инициализирую свой массив на ноль, и когда в программе происходит что-то, различные части копируются в массив с именем dataBlock, который является частью массива с именем cache, который состоит из объектов с именами SlotNodes.класс симулятора как так

  public static SlotNode[] cache = new SlotNode[8];
  public static int cacheSize = 8;
  public static int memSize = 2048;
  public static byte[] main_Mem = new byte[memSize];

Есть меню, если мы пытаемся прочитать адрес, мы анализируем адрес:

      public static void readAddress() {
          System.out.println("What address? ");
         //String tmpAddress = keyboard.next();
          address = keyboard.nextInt(16);

          System.out.println("After parsing the string to base 16, you get ");
          System.out.printf("%X", 0xFF & address);
          System.out.println(" ");
          //get offset
          offset = address & 0x7;
          System.out.println(offset);
          //get tag
          int tmpTag = address >> 6;
          tag = tmpTag & 0x1F;
          System.out.println(tag);
          //get slot
          slot = (address >> 3) & 0x7;
          System.out.println(slot);

          //go to slot number and see what valid bit is
          if (cache[slot].getValidBit() == 0) {

Когда validbit равен 0, тогда мы должныблок данных из массива main_Mem в массив dataBlock массива кэша.

System.out.println("Miss");
                  //copy block in main memory, 8 bytes
                  //address/8 gets address of block in mainmemory
                  int startAddress = address & 0x7F8;

                  System.out.println("The start address of " + address + " should be "  + startAddress);
                  cache[slot].setValidBit(1);
                  cache[slot].setTag(tag);
                 //Now need to copy from startAddress plus 8 bytes into cache[slot]
                 while (cacheSize < 8){
                 System.arraycopy(main_Mem, startAddress, cache[slot].dataBlock, 0, cacheSize);
          }

                  System.out.println();
                  System.out.println("The block of data is: ");
                  for (int i=0; i<8; i++) {
                      for (int j=0; j<7; j++){
                          System.out.println("Value: " + cache[i].dataBlock[j]);
                      }
                  }

          }

Допустимый бит, установленный на '1', печатается нормально.Просто кажется, что числа из массива main_mem не копируются туда, где они должны быть.(

1 Ответ

1 голос
/ 22 марта 2012

Вы инициализируете cacheSize равным 8, но копируете только тогда, когда cacheSize <8. Это никогда не так. </p>

Извините, что опровергаю это, но об этом вы должны узнать с помощью отладчикаи пошагово просматривая вашу программу, вместо того чтобы люди отлаживали ваш код, читая его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...