Установка числа в многомерном массиве, равного слову - PullRequest
0 голосов
/ 26 октября 2018

В настоящее время пишу Java-программу для Tomasulo's Algorithm. Я пытаюсь взять число из массива multidimensional, установить его в слово.

Это чтение из текстового файла, который выглядит следующим образом:

10

7

0 2 2 1

0 3 3 2

0 4 2 3

2 5 2 4

2 6 3 5

3 7 3 4

Первые две строки обойдены для других вещей, но затем я хотел бы, чтобы первое число каждой из строк было установлено на такое слово, как '0' до 'add', '1' до 'sub' От '2' до 'mult' и '3' до 'div'

Как мне это сделать?

   int IntQue[][] = new int[10][4];

    Scanner scanInt = new Scanner(file);
    n = 0; // for the number of instructions
    displayCycle = 0; // cycle to be displayed

    if (scanInt.hasNext()) {
        n = scanInt.nextInt(); // number of instructions taken from file
        displayCycle = scanInt.nextInt(); // cycle number taken from file
    }


            for (int i = 0; i < n; i++) {
        for (int j = 0; j < 4; j++) {
            IntQue[i][j] = scanInt.nextInt();
        }
    }

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вместо целочисленного массива вы можете использовать строковый массив для установки значений на основе целочисленного значения, которое вы читаете из файла.

Ниже приведен код для выполнения вашего требования:

    public class ArrayTest {
    public static void main(String[] args) throws FileNotFoundException {
        String stringArray[][] = new String[10][4];

        Scanner scanInt = new Scanner(new File("File Path"));
        int n = 0; // for the number of instructions
        int displayCycle = 0; // cycle to be displayed

        if (scanInt.hasNext()) {
            n = scanInt.nextInt(); // number of instructions taken from file
            displayCycle = scanInt.nextInt(); // cycle number taken from file
        }


        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 4; j++) {
                if (scanInt.hasNext()) {
                    stringArray[i][j] = getStringValue(scanInt.nextInt());
                }
            }
        }

        // Printing the data
        for (String[] strArray : stringArray) {
            for (String s : strArray) {
                System.out.print(s+" ");
            }
            System.out.println();
        }
    }

    static String getStringValue(int number) {
        String value = null;
        switch (number) {
            case 0:
                value = "add";
                break;
            case 1:
                value = "sub";
                break;
            case 2:
                value = "mult";
                break;
            case 3:
                value = "div";
                break;
            default:
                value = "";
                break;
        }
        return  value;
    }
}
0 голосов
/ 26 октября 2018

Я бы, вероятно, использовал оператор switch для обработки этого, поскольку вы обрабатываете не более 10 возможных результатов (0-9).В каждом случае я буду хранить преобразованные значения в отдельном массиве String, который можно индексировать по количеству строк в вашем файле.Следующая программа должна позаботиться обо всем, включая сохранение конечных чисел:

Обновление: эта программа на самом деле очень похожа на другую заявку, но должна ответить на всю проблему

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class TomasuloAlgorithimDriver {

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("C:/PathToFile/File.txt");
        Scanner scanInt = new Scanner(file);
        String line = "";
        int cycle = 0;

        //Initializations are specific to your example
        String[] convertedFirstNums = new String[6];
        int[][] nums = new int[8][3];

        while (scanInt.hasNextLine()) {
            line = scanInt.nextLine();
            cycle++;
            if(cycle > 2) {//Only executes after first two lines are parsed

                //Grab first integer for conversion
                String firstNum = "" + line.toCharArray()[0];
                convertedFirstNums[cycle-3] = switchInteger(Integer.parseInt(firstNum));

                //Parse the rest of the line, ignoring the first integer
                int ind = 0;
                for(char c : line.substring(1).toCharArray()) {
                    switch(c) {
                    case ' ': //Skip all spaces in the line
                        break;
                    default: //Take following integers and saves them to num array
                        String num = "" + c;
                        nums[cycle-1][ind] = Integer.parseInt(num);
                        ind++;
                        break;
                    }
                }

            } else {
                //Pick up first two lines 
                nums[cycle-1][0] = Integer.parseInt(line);
            }
        }

        scanInt.close();

        for(int i=0; i < nums.length; i++) {
            if(i < 2) //Print first two numbers from first two lines
                System.out.printf("%d\n", nums[i][0]);  
            else {
                System.out.print(convertedFirstNums[i-2] + " : ");
                for(int j=0; j < nums[i].length; j++) {
                    System.out.printf("%d ", nums[i][j]);
                }
                System.out.println();
            }
        }

    }

    public static String switchInteger(int i) {
        switch(i) {
        case 0: return "add ";
        case 1: return "sub ";
        case 2: return "mult";
        case 3: return "div ";
        }
        return "err ";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...