Редактирование ячеек для электронных таблиц назначается не той ячейке в моем простом текстовом процессоре электронных таблиц - PullRequest
0 голосов
/ 10 марта 2019

Я делаю обработчик электронных таблиц для класса и пытаюсь выяснить, почему значения, которые я даю, попадают не в ту ячейку. например D8 = "яблоко" переходит в H8 или D4 = "груша" переходит в B4. Я просмотрел свой код и не нашел ничего особенно неправильного в команде, которая присваивает ячейку, так как она принимает значение индекса, которое она предоставила, но все же назначает неправильную ячейку. Почему это может происходить? Я прогнал его через отладчик и не заметил ничего, кроме самого конечного результата.

Мой код: пакет textExcel;

//*******************************************************
//DO NOT MODIFY THIS FILE!!!
//*******************************************************

public interface Grid 
{
    // Grid interface, must be implemented by your Spreadsheet class
    String processCommand(String command); // processes a user command, returns string to display, must be called in loop from main
    int getRows(); // returns number of rows in grid
    int getCols(); // returns number of columns in grid
    Cell getCell(Location loc); // returns cell at loc
    String getGridText(); // returns entire grid, formatted as text for display
}
package textExcel;

public class EmptyCell implements Cell{

    public String abbreviatedCellText(){ // text for spreadsheet cell display, must be exactly length 10
        return "          ";
    }
    public String fullCellText(){ // text for individual cell inspection, not truncated or padded
        return "";
    }
}
package textExcel;

//*******************************************************
// DO NOT MODIFY THIS FILE!!!
//*******************************************************

public interface Cell
{
    public String abbreviatedCellText(); // text for spreadsheet cell display, must be exactly length 10
    public String fullCellText(); // text for individual cell inspection, not truncated or padded
}
package textExcel;

public class Spreadsheet implements Grid{
    private int row = 20;
    private int col = 12;
    private Cell[][] sheet;
    public Spreadsheet(){
        sheet = new Cell[20][12];
        for(int x = 0; x < sheet.length; x++) {
            for(int y = 0; y < sheet[x].length; y++) {
                sheet[x][y] = new EmptyCell();
            }
        }
    }
    public String processCommand(String command){ // processes a user command, returns string to display, must be called in loop from main
        if(command.contentEquals("")) {
            return "";
        }
        else if(command.equals("quit")) {
            return "";
        }
        else if(command.equals("clear")){
            sheet = new Cell[20][12];
            for(int x = 0; x < sheet.length; x++) {
                for(int y = 0; y < sheet[x].length; y++) {
                    sheet[x][y] = new EmptyCell();
                }
            }
            return getGridText();
        }
        else if(((Character.isDigit(command.charAt(1))) && (Character.isLetter(command.charAt(0)))) && (command.length() == 2)) {
            int col = (int)command.toUpperCase().charAt(0) - 65;
            int row = (int)command.charAt(1) - 49;
            return sheet[col][row].fullCellText();
        }
        else if((command.contains("clear")) && (command.length() > 5)) {
            int col = (int)command.charAt(6) - 65;
            int row = (int)command.charAt(7) - 49;
            sheet[col][row] = new EmptyCell();
            return getGridText();
        }
        else if(command.contains(" = ")) {
            int col = (int)command.toUpperCase().charAt(0) - 65;
            int row = (int)command.charAt(1) - 49;
            System.out.println(col + ", " + row);
            sheet[col][row] = new TextCell(command.substring(6, command.length()-1));
            return getGridText();
        }
        return "";
    }
    public int getRows(){ // returns number of rows in grid
        return row;
    }
    public int getCols(){ // returns number of columns in grid
        return col;
    }
    public Cell getCell(Location loc){ // returns cell at loc
        int col = loc.getCol();
        int row = loc.getRow();
        return sheet[row][col];
    }
    public String getGridText(){ // returns entire grid, formatted as text for display
        String formatted;
        formatted = "   |A         |B         |C         |D         |E         |F         |G         |H         |I         |J         |K         |L         |\n";
        for(int x = 0; x < sheet.length - 11; x++) {
            String temp = (x+1) + "  |";
            for(int y = 0; y < sheet[x].length; y++) {
                temp = temp + sheet[x][y].abbreviatedCellText() + "|";
            }
            formatted = formatted + temp + "\n" ;
        }
        for(int x = 9; x < sheet.length; x++) {
            String temp = (x+1) + " |";
            for(int y = 0; y < sheet[x].length; y++) {
                temp = temp + sheet[x][y].abbreviatedCellText() + "|";
            }
            formatted = formatted + temp + "\n" ;
        }
        return formatted;
    }
}
package textExcel;

//*******************************************************
//DO NOT MODIFY THIS FILE!!!
//*******************************************************

public interface Location
{
    // represents a location like B6, must be implemented by your SpreadsheetLocation class
    int getRow(); // gets row of this location
    int getCol(); // gets column of this location
}
package textExcel;

//Update this file with your own code.

public class SpreadsheetLocation implements Location
{
    private String Loc;
    private int col;
    private int row;
    public SpreadsheetLocation(String cellName)
    {
        Loc = cellName;
        row = Integer.parseInt(Loc.substring(1)) - 1;
        col = Loc.charAt(0) - 64;
    }
    public String getName() {
        return Loc;
    }
    @Override
    public int getRow()
    {
        return Integer.parseInt(Loc.substring(1)) - 1;
    }

    @Override
    public int getCol()
    {
        return col - 1;
    }
   }
package textExcel;

public class TextCell implements Cell {
    private String cell;

    public TextCell(String cell) {
        this.cell = cell;
    }

    @Override
    public String abbreviatedCellText() {
        if(cell.length() > 11) {
            return cell.substring(0,9);
        }
        else {
            if(cell.length() == 0) {
                return cell + "          ";
            }
            else if(cell.length() == 1) {
                return cell + "         ";
            }
            else if(cell.length() == 2) {
                return cell + "        ";
            }
            else if(cell.length() == 3) {
                return cell + "       ";
            }
            else if(cell.length() == 4) {
                return cell + "      ";
            }
            else if(cell.length() == 5) {
                return cell + "     ";
            }
            else if(cell.length() == 6) {
                return cell + "    ";
            }
            else if(cell.length() == 7) {
                return cell + "   ";
            }
            else if(cell.length() == 8) {
                return cell + "  ";
            }
            else if(cell.length() == 9) {
                return cell + " ";
            }
            else {
                return "          ";
            }
        }
    }

    @Override
    public String fullCellText() {
        // TODO Auto-generated method stub
        return cell;
    }

}
package textExcel;

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

// Update this file with your own code.

public class TextExcel
{

    public static void main(String[] args)
    {
        SpreadsheetLocation loc = new SpreadsheetLocation("L20");
        Spreadsheet test = new Spreadsheet();
        String test1 = test.processCommand("A1");
        System.out.println(test1);

        System.out.println(test.getGridText());
        System.out.println(test.getCell(loc));
        Scanner sc = new Scanner(System.in);
        System.out.println("input :");
        String input = sc.nextLine();
        System.out.println(test.processCommand(input));
        System.out.println("input :");
        input = sc.nextLine();
        System.out.println(test.processCommand(input));
        System.out.println("input :");
        input = sc.nextLine();
        System.out.println(test.processCommand(input));
        System.out.println("input :");
        input = sc.nextLine();
        System.out.println(test.processCommand(input));
        System.out.println("input :");
        input = sc.nextLine();
        System.out.println(test.processCommand(input));

    }
}
...