Установка числа в многомерном массиве равным слову

В настоящее время пишу программу на 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();
        }
    }

Я бы сканировал его как String вместо nextInt(), а затем использовал String.replace()

Kartik 26.10.2018 04:41

Если вы хотите заменить число строкой, вам понадобится Object[][], а не int[][]. Object[][] может содержать объекты String, а также объекты Integer (действительно, объекты любого типа).

Ted Hopp 26.10.2018 05:35
0
2
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы, вероятно, использовал оператор 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 ";
    }
}
Ответ принят как подходящий

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

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

    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;
    }
}

Это хорошо работает для преобразования чисел в слова, но как мне получить следующие 3 числа после первого числа в строке, чтобы отображать только число?

M_Dubbs 26.10.2018 07:15

Не могли бы вы дать +1 за мой ответ, если он вам поможет, и не могли бы вы уточнить свой вопрос.

Udaya Shankara Gandhi Thalabat 26.10.2018 07:49

Результат выглядит примерно так | добавить мульт мульт саб | добавить div div mult | добавить мульт div | мульт мульт | mult div | div div | div | sub sub mult | мульт мульт саб | добавить div mult sub | есть ли способ сделать так, чтобы изменилось только первое число в каждой из строк, а остальные числа в строке остались такими, какими они были изначально?

M_Dubbs 26.10.2018 08:08

Другие вопросы по теме