【发布时间】:2019-07-31 17:23:12
【问题描述】:
我的代码是这样的
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.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.charAt(0) - 65;
int row = (int)command.charAt(1) - 49;
return sheet[col][row].fullCellText();
}
else if((command.length()) > 5 && (command.substring(0,4).equals("clear"))) {
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.charAt(0) - 65;
int row = (int)command.charAt(1) - 49;
System.out.println("col = " + col +", row = " + row);
sheet[col][row] = new TextCell(command.substring(7, command.indexOf("\"")));
System.out.println(sheet[col][row].abbreviatedCellText());
}
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++) {
System.out.println(sheet[x][y].abbreviatedCellText());
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++) {
System.out.println(sheet[x][y].abbreviatedCellText());
temp = temp + sheet[x][y].abbreviatedCellText() + "|";
}
formatted = formatted + temp + "\n" ;
}
return formatted;
}
}
当我在第 43 行输入 A1 = "apple" 时收到 java.lang.StringIndexOutOfBoundsException。在使用调试器和打印语句查看索引问题后,我不确定索引问题来自何处。我正在使用来自我在另一个类中使用的扫描仪类的输入运行该命令。
编辑: 对于运行所有这些所需的代码:
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 EmptyCell implements Cell{
public static final String CELL = " ";
public String abbreviatedCellText(){ // text for spreadsheet cell display, must be exactly length 10
return CELL;
}
public String fullCellText(){ // text for individual cell inspection, not truncated or padded
return CELL;
}
}
package 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;
//*******************************************************
//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)
{
String loc = cellName;
row = Integer.parseInt(loc.substring(1)) - 1;
col = loc.charAt(0) - 'A';
}
@Override
public int getRow()
{
// TODO Auto-generated method stub
return row - 1;
}
@Override
public int getCol()
{
// TODO Auto-generated method stub
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();
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();
test.processCommand(input);
System.out.println("input :");
input = sc.nextLine();
test.processCommand(input);
System.out.println("input :");
input = sc.nextLine();
test.processCommand(input);
System.out.println("input :");
input = sc.nextLine();
test.processCommand(input);
System.out.println("input :");
input = sc.nextLine();
test.processCommand(input);
}
}
【问题讨论】:
-
如果这是我的问题,并且我的代码没有按预期运行,我会使用我最喜欢的 IDE 调试器逐步调试代码。通过这种方式,我可以在程序的每个步骤中检查变量,并准确查看错误和原因。如果您还没有这样做,请尝试一下。如果您已经这样做了,那么请与我们分享这个练习为您带来了什么信息。
-
我再次运行 Eclipse,据我所知,我不知道发生了什么。当它到达我输入的子字符串部分时,它通过 String 类运行,然后排序跳转到 if (subLen
标签: java arrays string substring indexoutofboundsexception