abc-formule

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • granitk7
  • Registratie: Augustus 2014
  • Laatst online: 06-12-2024
Ik ben begonnen met programmeren in Android studio en nu probeer ik dus een simpele app te maken om eens te kijken hoe alles werkt.

De app moet meerdere dingen kunnen één daarvan is de abc formule uitvoeren dus
x1 uit rekenen met de formule (-b² - wortel(4AC)) / (2A)
en x2 uit rekenen met (-b² + wortel(4AC)) / (2A)

Oftewel in code taal:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  Button calc2Btn = (Button) findViewById(R.id.calc2Btn);
        calc2Btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float A = Float.parseFloat(aTxt.getText().toString());
                float B = Float.parseFloat(bTxt.getText().toString());
                float C = Float.parseFloat(cTxt.getText().toString());
                float D = B * B - 4 * A * C;
                double E = Math.sqrt(D);
                disTxt.setText(Float.toString(D));
                if (D >= 0) {
                    double X1 =  ((-B - E) / (2 * A));
                    x1Txt.setText(Double.toString(X1));
                    double X2 = ((-B + E) / (2 * A));
                    x2Txt.setText(Double.toString(X2));
                } else {
                    x1Txt.setText("Geen oplossing");
                    x2Txt.setText("Geen oplossing");

                }
            }
        });
   }


Ik heb dit gemaakt om een nieuwe activity te starten
Java:
1
2
3
4
5
6
7
8
9
   Button abcBtn = (Button) findViewById(R.id.abcBtn);
        abcBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Mainscreen.this, ABC_formule.class);
                startActivity(intent);
            }
        }); 


Maar als ik op de knop druk om naar de Activity te gaan die de abc formule moet kunnen uitvoeren dan sluit de app zich af.


Ik zou echt niet weten waar het probleem zou kunnen liggen, omdat de Android studio zelf geen foutmelding geeft.

[ Voor 75% gewijzigd door granitk7 op 27-10-2016 23:20 ]

Beste antwoord (via granitk7 op 28-10-2016 01:03)


Verwijderd

Android-technisch is er niets mis met je code.

Om te kijken wat er fout gaat kun je het logcat window in AS openen: View->tool windows->android monitor

Wat bedoel je met 'de app sluit zichzelf af'? Op android bestaat dat concept namelijk niet echt. Hij kan wel crashen.

Post anders je logcat log, daar staat het vast in. (Mijn eerste gok: je hebt de activity niet defined in AndroidManifest.xml)

[ Voor 10% gewijzigd door Verwijderd op 28-10-2016 00:52 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Code kun je in je topic posten m.b.v. code tags. Zodoende heeft je topic over een paar jaar ook nog nut voor iemand die er op stuit en jij in middels de bestanden uit je dropbox hebt gegooid.

Daarnaast is 't de bedoeling dat je zélf een (concrete) vraag stelt en laat zien wat je zélf al hebt geprobeerd/gezocht/gevonden. We zitten hier niet om voor Jan-en-alleman hun code door te spitten op zoek naar fouten (Debuggen: Hoe doe ik dat?). Zgn. Kan iemand even...? topics stellen we hier dan ook niet op prijs ;)

Pas je topicstart even aan met de relevante(!) stukjes code en hou je topicstart dan meteen even tegen onze Quickstart aan om te zien wat je nog meer moet aanpassen om zo toch nog geholpen te worden ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • granitk7
  • Registratie: Augustus 2014
  • Laatst online: 06-12-2024
Bedankt voor je reactie. Ik snap dat ik normaal gezien niet alle code moet plaatsen, maar het probleem is dat ik echt niet weet waar het probleem zou kunnen liggen en ik weet niet of ik zo te weinig informatie plaats. Ik hoop dat de aanpassingen die ik heb gemaakt zo goed zijn.

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
granitk7 schreef op donderdag 27 oktober 2016 @ 23:22:
Ik hoop dat de aanpassingen die ik heb gemaakt zo goed zijn.
Het gaat de goede kant op ;)
Ik mis nog steeds een paar stukken uit onze Quickstart zoals wat je zélf al hebt geprobeerd (welke stappen heb je ondernomen om je probleem te (proberen te) tackelen) / gezocht (welke keywords gebruikte je bijvoorbeeld, welke zaken heb je bekeken) / gevonden (welke 'hits' heb je doorgenomen en waren, om welke reden, niet van toepassing voor je?), wat je bevindingen waren tijdens debuggen (ook daar staat een link voor in mijn vorige post) en vind ik "sluit de app zich af" nogal... vaag. Krijg je een foutmelding? Zo ja: welke? Zo nee: is 't wel een crash of sluit de app netjes af?

[ Voor 18% gewijzigd door RobIII op 27-10-2016 23:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • Beste antwoord
  • +1 Henk 'm!

Verwijderd

Android-technisch is er niets mis met je code.

Om te kijken wat er fout gaat kun je het logcat window in AS openen: View->tool windows->android monitor

Wat bedoel je met 'de app sluit zichzelf af'? Op android bestaat dat concept namelijk niet echt. Hij kan wel crashen.

Post anders je logcat log, daar staat het vast in. (Mijn eerste gok: je hebt de activity niet defined in AndroidManifest.xml)

[ Voor 10% gewijzigd door Verwijderd op 28-10-2016 00:52 ]


Acties:
  • 0 Henk 'm!

  • granitk7
  • Registratie: Augustus 2014
  • Laatst online: 06-12-2024
Goed gegokt!

Heel erg bedankt voor je hulp. Ik leer het maken van Android apps nu vooral via Youtube, maar dat is niet altijd handig. Weet jij misschien een handige manier om meer van het programmeren in Android studio te leren?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik geloof dat google wat udacity courses heeft gemaakt voor beginners, verder gewoon een zwik tutorials lezen over dat wat je van plan bent te maken, dan leer je t vanzelf 'al doende'.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

granitk7 schreef op vrijdag 28 oktober 2016 @ 01:02:
Goed gegokt!

Heel erg bedankt voor je hulp. Ik leer het maken van Android apps nu vooral via Youtube, maar dat is niet altijd handig. Weet jij misschien een handige manier om meer van het programmeren in Android studio te leren?
Waarom is Android Studio überhaupt relevant? Programmeren voor Android is ruwweg hetzelfde of je het nu in Android Studio, IDEA, of eender welke andere IDE doet. Met een goede algemene uitleg over hoe je überhaupt programmeert voor Android ben je dus waarschijnlijk net zo goed geholpen. En op zich zijn er best een paar leuke tutorials beschikbaar in de documentatie

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • +1 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
granitk7 schreef op vrijdag 28 oktober 2016 @ 01:02:
Goed gegokt!

Heel erg bedankt voor je hulp. Ik leer het maken van Android apps nu vooral via Youtube, maar dat is niet altijd handig. Weet jij misschien een handige manier om meer van het programmeren in Android studio te leren?
Tweakers heeft een Online Java Academy (misschien niet helemaal up-to-date) die je kunt bekijken:
https://tweakers.net/advertorials/onlinejavaacademy/

Acties:
  • 0 Henk 'm!

  • GeeBee
  • Registratie: Maart 2000
  • Laatst online: 08:12

GeeBee

Oddball

Als je toch bezig bent:
x1 = (-b + wortel(b^2 - 4ac)) / 2a
x2 = (-b - wortel(b^2 - 4ac)) / 2a

... wilde ik zeggen, maar in de code staat het wel goed.

Wel is het netter om na het berekenen van D pas verder te gaan met het berekenen van E ná de controle op D>=0. Als de discriminant immers kleiner is dan 0 zijn er geen oplossingen, dus loopt het misschien vast op wortel(negatief)?

Verder geen verstand van Java, maar ik neem aan dat je eerst a, b en c invoert en daarna op het knopje klikt.
Gaat het invoeren wel goed? Zo ja, heb je waardes ingevoerd die zeker weten minimaal 1 oplossing geven?

[ Voor 21% gewijzigd door GeeBee op 28-10-2016 21:58 ]

Woof, woof, woof! That's my other dog imitation.


Acties:
  • 0 Henk 'm!

  • granitk7
  • Registratie: Augustus 2014
  • Laatst online: 06-12-2024
GeeBee schreef op vrijdag 28 oktober 2016 @ 21:52:


Wel is het netter om na het berekenen van D pas verder te gaan met het berekenen van E ná de controle op D>=0. Als de discriminant immers kleiner is dan 0 zijn er geen oplossingen, dus loopt het misschien vast op wortel(negatief)?
Als je goed terug kijkt naar de code dan zie je dat ik met een if en else voorwaarde aangegeven heb dat als D kleiner is dan 0 er wordt aangegeven in X1 en X2 dat er geen oplossing is.
The_Ghost16 schreef op vrijdag 28 oktober 2016 @ 11:13:
[...]

Tweakers heeft een Online Java Academy (misschien niet helemaal up-to-date) die je kunt bekijken:
https://tweakers.net/advertorials/onlinejavaacademy/
Hier heb ik al naar gekeken, maar naar mijn mening is deze Java cursus vrij slecht, vooral als je een beginnend programmeerder bent. Ik ben er wel achter gekomen dat Devslopez een nieuwe app voor Android heeft gemaakt die je leert hoe je kan apps kan maken voor Android. Echt een aanrader moet ik zeggen.

Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
granitk7 schreef op vrijdag 28 oktober 2016 @ 23:03:
[...]


Als je goed terug kijkt naar de code dan zie je dat ik met een if en else voorwaarde aangegeven heb dat als D kleiner is dan 0 er wordt aangegeven in X1 en X2 dat er geen oplossing is.
Je rekent E al uit voor je if. Java geeft volgens de documentatie NaN terug bij een negatief argument en gooit gelukkig geen Exception, maar ook ik vind dat niet echt netjes. Je zou E pas uit moeten rekenen als je weet dat dat mogelijk is. In je if dus.

Acties:
  • 0 Henk 'm!

  • GeeBee
  • Registratie: Maart 2000
  • Laatst online: 08:12

GeeBee

Oddball

granitk7 schreef op vrijdag 28 oktober 2016 @ 23:03:
[...]


Als je goed terug kijkt naar de code dan zie je dat ik met een if en else voorwaarde aangegeven heb dat als D kleiner is dan 0 er wordt aangegeven in X1 en X2 dat er geen oplossing is.


[...]
^^ Met Daos

Als je mijn reactie goed leest, zie je dat ik de voorwaarde D>=0 eerder in de code zou doen.
Eerst D berekenen
if D<0
{ print Geen oplossing
} else {
E = wortel(D)
X1 en X2 berekenen
Print x1 en x2
}
Enz...

Woof, woof, woof! That's my other dog imitation.


Acties:
  • 0 Henk 'm!

  • granitk7
  • Registratie: Augustus 2014
  • Laatst online: 06-12-2024
Ik snap niet helemaal waarom dat handiger zou zijn. Als ik mijn code zelf goed begrijp dan definieer ik eerst A,B,C,D en E. Dan geef ik aan dat in het dstTxt de discriminant moet worden weergegeven.Dan geef ik aan wat er moet gebeuren als D nul of groter is. Als dat niet het geval is dus dan is het getal onder de wortel negatief en is er dus geen oplossing en anders geeft die het antwoord in x1Txt en x2Txt. Overigens heb ik de app ook meerdere malen getest en geeft deze geen errors of foute antwoorden. Ik zie het probleem dus ook niet zo snel.

Begrijp mij niet verkeerd ik probeer het allemaal goed te begrijpen, maar het is nog allemaal nieuw voor mij :s
Wel heel erg bedankt voor jullie hulp!

Maar als ik het dus goed begrijp wat er moet veranderen dan moet het dus zo:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
float A = Float.parseFloat(aTxt.getText().toString());
float B = Float.parseFloat(bTxt.getText().toString());
float C = Float.parseFloat(cTxt.getText().toString());
float D = B * B - 4 * A * C;
      disTxt.setText(Float.toString(D));
      if (D < 0) {
      x1Txt.setText("Geen oplossing");
      x2Txt.setText("Geen oplossing");
      } else {
      double E = Math.sqrt(D);
      double X1 =  ((-B - E) / (2 * A));
      x1Txt.setText(Double.toString(X1));
      double X2 = ((-B + E) / (2 * A));
      x2Txt.setText(Double.toString(X2));

Acties:
  • 0 Henk 'm!

  • GeeBee
  • Registratie: Maart 2000
  • Laatst online: 08:12

GeeBee

Oddball

Ik vind het niet netjes om de wortel van een mogelijke negatieve discriminant te laten berekenen.
Daarom eerst controleren of D >=0 en daarna de rest.

[ Voor 3% gewijzigd door GeeBee op 29-10-2016 02:28 ]

Woof, woof, woof! That's my other dog imitation.


Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
De if en else verwisselen en de conditie omdraaien maakt niet zoveel uit. Waar het om gaat is dat je een wortel trekt van een (potentieel) negatief getal en dat kan in theorie niet. Jij doet eerst de berekening en je bepaalt daarna pas of het mogelijk was om die berekening uit te voeren.

Dat is net zoiets als de volgende code:

Java:
1
2
3
4
5
6
7
8
9
10
11
int n = 5;
int d = 0;

int q = n / d;

if (d == 0) {
    System.out.println("division invalid! denominator is zero!");
}
else {
    System.out.println(n + " divided by " + d + " is " + q);
}


In dit geval kom je nooit bij een println omdat er een ArithmeticException wordt gegooid bij de deling.

Acties:
  • 0 Henk 'm!

  • Wim-Bart
  • Registratie: Mei 2004
  • Laatst online: 10-01-2021

Wim-Bart

Zie signature voor een baan.

Daos schreef op zaterdag 29 oktober 2016 @ 02:30:
De if en else verwisselen en de conditie omdraaien maakt niet zoveel uit. Waar het om gaat is dat je een wortel trekt van een (potentieel) negatief getal en dat kan in theorie niet. Jij doet eerst de berekening en je bepaalt daarna pas of het mogelijk was om die berekening uit te voeren.

Dat is net zoiets als de volgende code:

Java:
1
2
3
4
5
6
7
8
9
10
11
int n = 5;
int d = 0;

int q = n / d;

if (d == 0) {
    System.out.println("division invalid! denominator is zero!");
}
else {
    System.out.println(n + " divided by " + d + " is " + q);
}


In dit geval kom je nooit bij een println omdat er een ArithmeticException wordt gegooid bij de deling.
SQRT(-4) = 2i = SQRT(-1) * SQRT(4)

Kan dus prima (zie o.a.).
http://www.regentsprep.or...ig/ato6/SquareRootLes.htm

Beheerders, Consultants, Servicedesk medewerkers. We zoeken het allemaal. Stuur mij een PM voor meer info of kijk hier De mooiste ICT'er van Nederland.


Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Op die fiets komt er ook altijd een oplossing uit de abc-formule :) Meneer heeft het over geen oplossing als D < 0 dus dan mag je aannemen dat het alleen over reële getallen gaat.

Acties:
  • 0 Henk 'm!

  • GeeBee
  • Registratie: Maart 2000
  • Laatst online: 08:12

GeeBee

Oddball

Hierna laat ik dit topic weer over aan de programmeurs.

i is niet wortel(-1), maar i^2 = -1
dus wortel(-4) = i wortel(4) = +-2i

Dus eerst i toepassen en daarna de niet-meer-negatieve wortel berekenen.

Woof, woof, woof! That's my other dog imitation.

Pagina: 1