NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Tomáš Šálek:5.6.2017 13:53

Typ app:kalkulačka
Funkcie:základné +,-,*,/,+/-,^,√
Pán učiteľ napísal, že mám zle premenné a operácie. A ja neviem nájsť ani jednu chybu.

public class MainActivity extends AppCompatActivity {
final float[] mCislo1 = new float[1];
final char[] mOperacia = new char[1];
private TextView mTV;
private Button mBT0;
private Button mBT1;
private Button mBT2;
private Button mBT3;
private Button mBT4;
private Button mBT5;
private Button mBT6;
private Button mBT7;
private Button mBT8;
private Button mBT9;
private Button mBTPower;
private Button mBTSquare;
private Button mBTKrat;
private Button mBTDeleno;
private Button mBTMinus;
private Button mBTPlus;
private Button mBTC;
private Button mBTZmena;
private Button mBTCiarka;
private Button mBTRovnaSa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(sa­vedInstanceSta­te);
setContentView(R­.layout.activi­ty_main);
final TextView mTV = (TextView) findViewById(R­.id.TextView);
Button mBT0 = (Button) findViewById(R­.id.button5);
Button mBT1 = (Button) findViewById(R­.id.button9);
Button mBT2 = (Button) findViewById(R­.id.button10);
Button mBT3 = (Button) findViewById(R­.id.button11);
Button mBT4 = (Button) findViewById(R­.id.button13);
Button mBT5 = (Button) findViewById(R­.id.button14);
Button mBT6 = (Button) findViewById(R­.id.button15);
Button mBT7 = (Button) findViewById(R­.id.button17);
Button mBT8 = (Button) findViewById(R­.id.button18);
Button mBT9 = (Button) findViewById(R­.id.button19);
Button mBTCiarka = (Button) findViewById(R­.id.button6);
Button mBTRovna = (Button) findViewById(R­.id.button7);
Button mBTMinus = (Button) findViewById(R­.id.button8);
Button mBTPlus = (Button) findViewById(R­.id.button12);
Button mBTDeleno = (Button) findViewById(R­.id.button16);
Button mBTKrat = (Button) findViewById(R­.id.button20);
Button mBTZmena = (Button) findViewById(R­.id.button22);
Button mBTSquare = (Button) findViewById(R­.id.button23);
Button mBTPower = (Button) findViewById(R­.id.button24);
Button mBTC = (Button) findViewById(R­.id.button21);

mBT0.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('0');
}
});

mBT1.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('1');
}
});

mBT2.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('2');
}
});

mBT3.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('3');
}
});

mBT4.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('4');
}
});

mBT5.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('5');
}
});

mBT6.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('6');
}
});

mBT7.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('7');
}
});

mBT8.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('8');
}
});

mBT9.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
pridajZnak('9');
}
});

mBTKrat.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
mCislo1[0] = Float.valueOf(mTV­.getText().toS­tring());
mOperacia[0] = '*';
mTV.setText("0");
}
});

mBTDeleno.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
mCislo1[0] = Float.valueOf(mTV­.getText().toS­tring());
mOperacia[0] = '/';
mTV.setText("0");
}
});

mBTMinus.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
mCislo1[0] = Float.valueOf(mTV­.getText().toS­tring());
mOperacia[0] = '-';
mTV.setText("0");
}
});

mBTPlus.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
mCislo1[0] = Float.valueOf(mTV­.getText().toS­tring());
mOperacia[0] = '+';
mTV.setText("0");
}
});

mBTC.setOnClic­kListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
mTV.setText("0");
}
});

mBTCiarka.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
String text = mTV.getText()­.toString();
if (!text.contain­s(".")) {
text = text + '.';
}
mTV.setText(text);
}
});

mBTZmena.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
String text = mTV.getText()­.toString();
if (!text.equals("0")) {
if (text.startsWith("-")) {
text = text.replace("-", "");
} else {
text = "-" + text;
}
}
mTV.setText(text);
}
});
mBTPower.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
mCislo1[0] = Float.valueOf(mTV­.getText().toS­tring());
mOperacia[0] = '^';
mTV.setText("0");
}
});

mBTSquare.setOn­ClickListener(new View.OnClickLis­tener() {
@Override
public void onClick(View v) {
mCislo1[0] = Float.valueOf(mTV­.getText().toS­tring());
mOperacia[0] = '√';
mTV.setText("0");
}
});

mBTRovnaSa.se­tOnClickListe­ner(new View.OnClickLis­tener(){
@Override
public void onClick (View v){
double cislo2 = Double.valueOf(mTV­.getText().toS­tring());
double vysledok = 0;
if (mOperacia[0] == '*') {
vysledok = mCislo1[0] * cislo2;
} else if (mOperacia[0] == '/') {
vysledok = mCislo1[0] / cislo2;
} else if (mOperacia[0] == '-') {
vysledok = mCislo1[0] - cislo2;
} else if (mOperacia[0] == '+') {
vysledok = mCislo1[0] + cislo2;
} else if (mOperacia[0] == '^') {
vysledok = Math.pow(mCis­lo1[0], cislo2);
} else if (mOperacia[0] == '√') {
vysledok = Math.pow(mCis­lo1[0], 1 / cislo2);
}
mTV.setText("" + vysledok);
}
});}

public void pridajZnak(char c) {

String text = mTV.getText()­.toString();
if (text.equals("0")) {
text = "" + c;
} else {
text = text + c;
}
mTV.setText(text);
}
}

 
Odpovědět
5.6.2017 13:53
Avatar
Daniel Timko
Člen
Avatar
Daniel Timko:6.6.2017 16:51

Ahoj,
je úplne nepotrebné vytvárať pole, o ktorom vieš že bude mať vždy veľkosť 1, keďže to môžeš nahradiť jednou premennou. Takisto si nie som istý, prečo si deklaroval "mCislo1" a "mOperacia" ako konštantné (final). Pôjde ti to pravdepodobne aj tak, ale nevidím v tom zmysel.
Takže toto:

final float[] mCislo1 = new float[1];
final char[] mOperacia = new char[1];

by som nahradil týmto:

float mCislo1;
char mOperacia;

Prípadne ak by ti niekde v kóde písalo chybu v zmysle, že premenná nebola inicializovaná, tak treba nastaviť počiatočnú hodnotu na 0.
A potom všade kde máš napr. mOperacia[0] stačí to zmeniť na mOperacia.

 
Nahoru Odpovědět
6.6.2017 16:51
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:12.6.2017 10:10

hlavně by se to dalo ulehčit. Zbytečně tam vytváříš tolik blbostí a kód ti už v začátku nabral nespočet řádků.

Často zkus přemýšlet, pokud máš velice podobný kód na mnoha místech (byť jen na dvou), tak jestli to nemůžeš nějak zobecnit a zkrátit.
Například, pokud ty máš všude stejný kód, jen se ti mění ve znaménku, kór, když ho máš ještě jako datový typ char, tak bys mohl cyklem vytvořit tlačítka, hodit tam switch s názvy a potom využít, že když ti bude metoda provádět takovou operaci, jaký má tlačítko název, tak jednoduše použíj jméno tlačítka.

Jestli to stihnu, večer bych ti hodil ukázku

PS: když vkládáš kód na toto forum, tak použij zdrojový kód format (třeba zkratka Ctrl + k)

Nahoru Odpovědět
12.6.2017 10:10
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.