Einfach App zur Notenberechnung

  • Antworten:8
Qpa
  • Forum-Beiträge: 75

26.06.2013, 19:23:41 via Website

Hallo ich habe ein paar Fragen.
Ich nutze Android Studio.

Ich will mir aktuell als erste App eine Noten Berechnung machen. Die Formel mag sich keiner merken ;)

Mit Hilfe der Android Studio Gui habe ich mir ein bisschen etwas zusammen "geclickt".

Aber bei einem Element weiß ich nicht so richtig weiter.
Man soll die maximal zu erreichende Punkte (Int:GZ) und die erreichten Punkte(double:FKZ) eingeben.
Doch wie wäre das am besten? Eine TextField/PlainText oder TextField/Numbers? Eigentlich hatte ich ein kleines Dropdown im Sinn welches man auf ein click öffnet und dann aus einer scrollbaren Liste von 1-20 man seine Punkte auswählt. Doch irgend wie finde ich das Widget nicht.

Dann gibt es natürlich noch einen Berechne (Gibt Ergebnis in einer TextView aus) und ein Reset Button(sets Punkte Eingabe zurück).

Eine anschließende Frage zur Punkte Auswahl.

Aktuell habe ich nur das hier. Da ich mir noch nicht sicher bin wie ich die Punkte auswähle. Angenommen ich nehme ein EditText (number) als was für ein Datentyp bekomme ich das?

1public class MainActivity extends Activity implements View.OnClickListener {
2
3 TextView mnote;
4 EditText mMyPoints;
5 EditText mMaxPoints;
6
7 @Override
8 protected void onCreate(Bundle savedInstanceState) {
9 super.onCreate(savedInstanceState);
10 setContentView(R.layout.activity_main);
11
12 setupWidgets();
13 }
14
15 private void setupWidgets()
16 {
17 Button berechne = (Button) findViewById(R.id.btn1calc);
18 berechne.setOnClickListener(this);
19
20 mMyPoints=(EditText)findViewById(R.id.eTerreichte);
21 mMaxPoints=(EditText)findViewById(R.id.eTgesamte);
22 mnote=(TextView)findViewById(R.id.tVNote);
23
24 }
25
26 @Override
27 public boolean onCreateOptionsMenu(Menu menu) {
28 // Inflate the menu; this adds items to the action bar if it is present.
29 getMenuInflater().inflate(R.menu.main, menu);
30 return true;
31 }
32
33
34 @Override
35 public void onClick(View view)
36 {
37 if (view.getId()==R.id.btn1calc)
38 {
39 #get input data
40 int maxpoints = mMaxPoints.getText().xxxxxxxxx
41 double mypoints = mMyPoints.getText().toString(); --> String zu Double ist ja nicht wie jeder weiß.
42
43
44 #formel
45 double note = 0;
46 note = 6-(5-(maxpoints/mypoints)
47 #note in tv ausgeben
48 }
49 }
50}

— geändert am 26.06.2013, 19:25:35

Antworten
impjor
  • Forum-Beiträge: 1.793

26.06.2013, 21:59:21 via App

Die Methode getText() liefert dir einen String, den du mit Double.valueOf(dein string); in einen double casten kannst. Beachte aber, dass wenn der User z.B. "abc" eingibt die App abstürzen wird, da dies ja nicht umgewandelt werden kann. Du solltest also das entsprechend abfabgen.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Qpa
  • Forum-Beiträge: 75

27.06.2013, 13:38:12 via Website

Danke, also quasi so?

1[..]
2EditText mMyPoints;
3[..]
4
5string mypoints = mMyPoints.getText().toString();
6Double.valueOf(mypoints); -> Muss ich das zurück in double mypointsDouble schreiben?


Funktioniert das ganze genauso wenn ich die Auswahl über ein "Spinner" mache? Kommt das auch als String an mich zurück?#


Mit freundlichen Grüßen

— geändert am 27.06.2013, 13:41:10

Antworten
Gelöschter Account
  • Forum-Beiträge: 115

27.06.2013, 14:30:08 via Website

Um es etwas kürzer zu machen:

1double mypoints = Double.valueOf(String.valueOf(mMyPoints.getText()));

Double.valueOf() erwartet einen String. Das kannst du entweder durch .toString() bewirken, oder wie ich es gemacht habe mit String.valueOf().
Das ganze ist nötig weil mMyPoints.getText() ein Editable zurückliefert.

Das ganze funktioniert auch so mit einem Spinner. Der Spinner liefert mit getSelectedItem() ein Objekt zurück, welches du in den Typen Double konvertieren musst. Wie das ganze geht weißt du ja jetzt :)

Grüße

Teste dein IT-Wissen! - IT Quiz

Qpa

Antworten
Qpa
  • Forum-Beiträge: 75

27.06.2013, 17:47:04 via Website

Danke Danke hab ich nun kapiert =)
Kann ich das double dann direkt in ne TextView ausgeben oder muss ich es zuerst wieder in ein String verwandeln?

1note = (6-(5*(mypoints/maxpoints)));
2String string_note = String.valueOf(note);
3mErgebnis.setText(string_note);

So funktioniert es zumindest xD

Antworten
Gelöschter Account
  • Forum-Beiträge: 115

27.06.2013, 18:03:08 via Website

Du musst das ganze erst in einen String konvertieren, wie du es auch schon getan hast.
Das ganze könntest du auch noch kürzen, wenn du deine Variable note direkt als String deklarierst und bei der Zuweisung vom Typ Double in String konvertierst.
1String note = Double.toString(6-(5*(mypoints/maxpoints))));
2mErgebnis.setText(note);

— geändert am 27.06.2013, 18:06:13

Teste dein IT-Wissen! - IT Quiz

Antworten
Qpa
  • Forum-Beiträge: 75

27.06.2013, 19:22:47 via Website

Chrisdroid

1String note = Double.toString(6-(5*(mypoints/maxpoints))));
2mErgebnis.setText(note);

OK cool, danke so kann man es natürlich auch verschachteln =)

Noch einmal vielen Dank für die Hilfe!

Stoße bestimmt bald auf neue Probleme ^^

Antworten
Qpa
  • Forum-Beiträge: 75

30.06.2013, 12:45:13 via Website

Chrisdroid

Das ganze funktioniert auch so mit einem Spinner. Der Spinner liefert mit getSelectedItem() ein Objekt zurück, welches du in den Typen Double konvertieren musst. Wie das ganze geht weißt du ja jetzt :)

Grüße

Sorry das habe ich erst jetzt gelesen =/
Aber hier sitze ich auch irgend wie auf dem trockenen, ich kann doch ein Objekt nicht in ein Double verwandeln oO


/EDIT
Jede Google Suche ergibt eigentlich das Ergebnis, dass man eine extra Klasse erstellen soll wie auch auf dev.android beschrieben wird.
http://developer.android.com/guide/topics/ui/controls/spinner.html#SelectListener

Habe das noch eine andere Methode gefunden. Diese könnte aber eine NullPointerException schmeißen sagt zumindest Android Studio.


1mMaxPoints_spin = (Spinner) findViewById(R.id.spinner_max);
2ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.spinner_array, android.R.layout.simple_spinner_item);
3adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
4mMaxPoints_spin.setAdapter(adapter);
5
6String spinner_maxpoints_string = mMaxPoints_spin.getSelectedItem().toString();
7double spinner_maxToDouble = Double.valueOf(String.valueOf(spinner_maxpoints_string));

— geändert am 30.06.2013, 16:04:38

Antworten