Olá,
Estou fazendo um exercício para a faculdade, porém não está dando nada certo e gostaria de orientações e caso alguém tenha paciência de fazer alguma versão diferente para eu ter como base eu agradeço.
Aqui está o enunciado
Enunciado: elaborar as classes Planilha, Celula , Formula e uma classe de teste. Os elementos que compõe a planilha estão representados através de uma matriz de células.
O conteúdo de uma célula pode ser: vazia (sem conteúdo), uma string, um valor (double) ou uma fórmula (que envolve os endereços de duas células e uma operação (+,-,/,*)). Quando o conteúdo da planilha é apresentado, as células com fórmulas exibem sempre o resultado da execução da fórmula.
fórmula: a soma de
B2 e B4
Exemplo de classe de teste:
Planilha p = new Planilha (30,40); // planilha de 30 linhas e 40 colunas
p.setCel(2.3 , 1 , 4); // coloca o valor 2.3 na célula da linha 1, coluna 4
p.setCel(10.0, 4 , 2); // coloca o valor 10.0 na célula da linha 4, coluna 2 p.setCel(“Contabilidade”, 1 , 1);
p.setCel(new Formula(‘+’, 1, 4, 4, 2), 2 , 2); // na célula linha 2, coluna 2 é inserida a fórmula
// que soma o contéudo das célula da
// linha 1, col 4 com a célula da linha 4, col 2.
p.mostraPlan(1,1,4,4); // mostra todas células da linha 1, coluna 1 até linha 4,coluna 4
p.salvaPlan(“planteste.xls”); // método de implementação opcional
// pode ser também implementado o método lePlanilha(nomePlanilha)
p.limpaCels(1, 1, 3, 2); //seta como vazias as células entre linha 1, coluna 1 até linha 3, coluna 2.
Aqui está as classes (gambiarras) que eu fiz
package planilha;
public class Celula {
protected Object obj;
public Celula(Object obj) {
this.obj = obj;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
if (obj instanceof Double) {
this.obj = (Double)obj;
}
if (obj instanceof String) {
this.obj = (String)obj;
}
}
@Override
public String toString() {
return obj + "";
}
}
package planilha;
public class Formula extends Planilha {
protected char sinal;
protected int linha1, coluna1, linha2, coluna2;
public Formula(char sinal, int l, int c, int linha1, int coluna1, int linha2, int coluna2) {
super(l, c);
operacao(sinal, l, c, linha1, coluna1, linha2, coluna2);
this.linha1 = linha1;
this.coluna1 = coluna1;
this.linha2 = linha2;
this.coluna2 = coluna2;
}
public void operacao(char s, int l, int c, int l1, int c1, int l2, int c2) {
for (int i = 0; i < celula.length; i++) {
for (int j = 0; j < celula[i].length; j++) {
if (s == '+' || s == '-' || s == '*' || s == '/') {
if (celula[l][c] == null) {
if (s == '+') {
celula[l][c].setObj((double) celula[l1][c2].getObj() + (double) celula[l2][c2].getObj());
}
if (s == '-') {
celula[l][c].setObj((double) celula[l1][c2].getObj() - (double) celula[l2][c2].getObj());
}
if (s == '*') {
celula[l][c].setObj((double) celula[l1][c2].getObj() * (double) celula[l2][c2].getObj());
}
if (s == '/') {
celula[l][c].setObj((double) celula[l1][c2].getObj() / (double) celula[l2][c2].getObj());
}
} else {
System.out.println("Celula já preenchida");
}
} else {
System.out.println("Sinal inválido");
}
}
}
}
public void setSinal(char sinal) {
this.sinal = sinal;
}
public void setLinha1(int linha1) {
this.linha1 = linha1;
}
public void setColuna1(int coluna1) {
this.coluna1 = coluna1;
}
public void setLinha2(int linha2) {
this.linha2 = linha2;
}
public void setColuna2(int coluna2) {
this.coluna2 = coluna2;
}
}
package planilha;
public class Planilha {
protected int linha, coluna;
protected Celula[][] celula;
public Planilha(int linha, int coluna) {
this.linha = linha;
this.coluna = coluna;
this.celula = new Celula[linha][coluna];
for (int i = 0; i < celula.length; i++) {
for (int j = 0; j < celula[i].length; j++) {
if (celula[i][j] == null) {
celula[i][j] = new Celula("\t");
}
}
}
}
public void setCell(int l, int c, Object obj) {
if (obj instanceof Double) {
celula[l][c] = new Celula((double) obj);
}
if (obj instanceof String) {
celula[l][c] = new Celula((String) obj);
}
}
public void setCell(char sinal, int l, int c, int linha1, int coluna1, int linha2, int coluna2) {
celula[l][c].obj = new Formula(sinal, l, c, linha1, coluna1, linha2, coluna2);
}
public void mostraCel(int l, int c) {
for (int i = 0; i < l; i++) {
System.out.println();
for (int j = 0; j < c; j++) {
System.out.print(celula[i][j] + "\t");
}
System.out.println();
}
}
}
Agradeço muito se alguém puder me ajudar