[JAVA] Ich habe eine Taschenrechner-App für Android erstellt

Überblick

Es ist eine einfache Taschenrechner-App. Ich habe es für das Studium von Android gemacht.

Android Studio 3.6.2 TableLayout caluculation.PNG

Einfallsreichtum / Schwierigkeit

・ Bilder nur unter bestimmten Bedingungen anzeigen Geändert, um das Bild in imageView mit setImageResource festzulegen.

・ Verarbeitung, die Multiplikation und Division priorisiert Speichern Sie die Berechnungsformel in ArrayList → Suchen Sie nach × ÷ und führen Sie eine Prioritätsberechnung durch → Löschen Sie den berechneten Teil aus der Liste → Fügen Sie das Berechnungsergebnis zur Liste hinzu → Wiederholen Sie diesen Vorgang, bis × ÷ verschwindet → Führen Sie dann eine + -Berechnung durch Ich habe es so implementiert.

・ Verlieren Sie den Berechnungsfehler von double Das Problem "1.0d --0.9d = 0.099999999 ..." wird angezeigt. Ich habe es mit der BigDecimal-Klasse gelöst.

・ Ein Fehler tritt auf, wenn die Teilung nicht teilbar ist. In BigDecimal tritt ArithmeticException auf, wenn eine Zahl angezeigt wird, die nicht durch Division (Kreisbruch) teilbar ist. Um diesen Fehler zu vermeiden, wird die Zahl mit der 11. Dezimalstelle abgerundet. Wenn Sie dies jedoch tun, tritt das Problem auf, dass die Zahl, selbst wenn sie teilbar ist, bis zur 10. Ziffer angezeigt wird. Es wird so sein → 4/2 = 2.0000000000 Um dies zu vermeiden, wird die Division in try-catch eingeschlossen und die Zahl an der 11. Stelle wird nur abgerundet, wenn eine ArithmeticException auftritt.

· Bug-Fix Vermeiden Sie die Eingabe mehrerer Dezimalstellen. Drücken Sie nicht + - × ÷ = an einer unbeabsichtigten Stelle. = Verschiedene Verhaltensweisen nach dem Klicken auf die Schaltfläche. Es gab viele andere Dinge ...

So erstellen Sie eine Schaltfläche über Spalten in TableLayout

Schmales lineares Layout innerhalb der Tabellenzeile.

activity_main.xml


<TableRow
        android:id="@+id/row2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <Button
                android:id="@+id/button4"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="@string/button4"
                android:textSize="25sp"
                android:onClick="btnCurrent_onClick"/>

            <Button
                android:id="@+id/button1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="@string/button1"
                android:textSize="25sp"
                android:onClick="btnCurrent_onClick"/>

        </LinearLayout>

        <!--Knopf über Linien-->
        <Button
            android:id="@+id/buttonPlus"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:background="#FFBF00"
            android:text="@string/buttonPlus"
            android:textSize="25sp"
            android:onClick="btnCurrent_onClick"/>
</TableRow>

        

Eindrücke / Reflexion

Ich habe viel gelernt, weil ich es nicht verstehen konnte, bis ich es geschafft habe. Ich werde im Zyklus des Lesens eines Buches weiter lernen → versuchen, es zu machen.

Der Reflexionspunkt ist, dass es voll von if-Sätzen ist. Ich möchte saubereren Code schreiben.

Vollständiger Code

MainActivity.java


package to.msn.wings.caluculator;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {

    List<String> stringList = new ArrayList<>();//Liste zum Speichern von Eingabezeichen
    int decimalPointCount = 0; //Eine Variable, die ein kontinuierliches Klicken auf die Dezimalpunktschaltfläche verhindert.
    int ClickedFormulaOnce = 0; // +-/*Zur Bestimmung, ob auch nur eine in der Berechnungsformel enthalten ist.+-*/Weil es nicht ohne eins berechnet werden kann.
    int formulaContinuousClick = 0; // +-/*Eine Variable, die ein kontinuierliches Klicken auf die Schaltfläche verhindert.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //Rechenmethode
    public void calculation(TextView txt) {
        //Holen Sie sich alle Zeichen in TextView und speichern Sie sie in einem Array.
        String txtAll = txt.getText().toString();

        //Ein regulärer Ausdruck, der auch das Trennzeichen selbst im Array enthält
        //Reguläre Ausdrücke((?<=[+×÷-])|(?=[+×÷-]))Die Bedeutung von+-Es bedeutet, unmittelbar vor und nach × ÷ zu trennen.
        String[] stringArray = txtAll.split("((?<=[+×÷-])|(?=[+×÷-]))", 0);

        //Löschen Sie nach dem Speichern im Array alle Zeichen in TextView.
        txt.setText(null);
        //Speichern Sie alle Arrays in ArrayList.
        for(String s:stringArray) {
            stringList.add(s);
        }
        //Im Gegensatz zu double hat Big Decimal keinen Fehler.
        BigDecimal bigDecimalResultValue = new BigDecimal("0.0");
        //Multiplikations- und Divisionsverarbeitung
        for(int i = 1; i < stringList.size(); i += 2) {
            if(stringList.get(i).equals("×")) {
                bigDecimalResultValue = new BigDecimal(stringList.get(i-1)).multiply(new BigDecimal(stringList.get(i+1)));
                //Entfernen Sie die berechneten Zahlen und Ausdrücke aus der Zeichenfolgenliste. Beispiel: "2*3+"2" von "1"*Löschen Sie den Teil von "3".
                stringList.remove(i-1);
                stringList.remove(i-1);
                stringList.remove(i-1);
                //Fügen Sie das Berechnungsergebnis zu stringList hinzu. Beispiel: "2*3+1 bis 6+Auf 1 "einstellen.
                stringList.add(i-1, String.valueOf(bigDecimalResultValue));
                //Ich habe 3 stringLists gelöscht und 1 hinzugefügt, also subtrahiere 2 von i.
                i -= 2;
            } else if (stringList.get(i).equals("÷")) {
                //Wenn die Bigdecimal-Division eine unteilbare Zahl ist, tritt ein ArithmeticException-Fehler auf. Schließen Sie es daher in trycath ein.
                //Wenn dies endgültig teilbar ist, wird 00000 nach dem Dezimalpunkt nicht verschwendet.
                //Runden Sie die 11. Stelle nur ab, wenn sie nicht teilbar ist.
                try {
                    bigDecimalResultValue = new BigDecimal(stringList.get(i-1)).divide(new BigDecimal(stringList.get(i+1)));
                } catch (ArithmeticException e) {
                    bigDecimalResultValue = new BigDecimal(stringList.get(i-1)).divide(new BigDecimal(stringList.get(i+1)), 10, RoundingMode.HALF_UP);//Gerundet. Anzeige bis zur 10. Ziffer.
                }
                stringList.remove(i-1);
                stringList.remove(i-1);
                stringList.remove(i-1);
                stringList.add(i-1, String.valueOf(bigDecimalResultValue));
                i -= 2;
            }
        }
        //Additions- und Subtraktionsverarbeitung
        //Multiplikation und Division wurden bereits verarbeitet, also einfach von vorne addieren und subtrahieren.
        while(stringList.size() > 1) {
            if(stringList.get(1).equals("+")) {
                bigDecimalResultValue = new BigDecimal(stringList.get(0)).add(new BigDecimal(stringList.get(2)));
                stringList.remove(0);
                stringList.remove(0);
                stringList.remove(0);
                stringList.add(0, String.valueOf(bigDecimalResultValue));
            } else if (stringList.get(1).equals("-")) {
                bigDecimalResultValue = new BigDecimal(stringList.get(0)).subtract(new BigDecimal(stringList.get(2)));
                stringList.remove(0);
                stringList.remove(0);
                stringList.remove(0);
                stringList.add(0, String.valueOf(bigDecimalResultValue));
            }
        }
        if(String.valueOf(bigDecimalResultValue).equals("3")) {
            //Verarbeitung, um das Bild nur anzuzeigen, wenn das Ergebnis 3 ist
            //Holen Sie sich das ImageView-Objekt basierend auf der ID
            @SuppressLint("ResourceType")
            ImageView iv = this.findViewById(R.id.imageView);
            //Legen Sie das Bild im Zeichenordner fest
            iv.setImageResource(R.drawable.nabeatsu);
            txt.setText("Weltpfannen");
        } else {
            txt.setText(String.valueOf(bigDecimalResultValue));
        }
        //Löschen Sie die Liste, nachdem Sie die Ergebnisse angezeigt haben.
        stringList.clear();
    }
    public void btnCurrent_onClick(View view) {
        //Textansicht abrufen
        TextView txt = findViewById(R.id.textView);
        //Beurteilen Sie die Schaltfläche, auf die die switch-Anweisung geklickt hat. Anzeige im Text.
        switch (view.getId()) {
            case R.id.button0:
                txt.append("0");
                formulaContinuousClick = 0;
                break;
            case R.id.button1:
                txt.append("1");
                formulaContinuousClick = 0;
                break;
            case R.id.button2:
                txt.append("2");
                formulaContinuousClick = 0;
                break;
            case R.id.button3:
                txt.append("3");
                formulaContinuousClick = 0;
                break;
            case R.id.button4:
                txt.append("4");
                formulaContinuousClick = 0;
                break;
            case R.id.button5:
                txt.append("5");
                formulaContinuousClick = 0;
                break;
            case R.id.button6:
                txt.append("6");
                formulaContinuousClick = 0;
                break;
            case R.id.button7:
                txt.append("7");
                formulaContinuousClick = 0;
                break;
            case R.id.button8:
                txt.append("8");
                formulaContinuousClick = 0;
                break;
            case R.id.button9:
                txt.append("9");
                formulaContinuousClick = 0;
                break;

            case R.id.buttonBS:
                formulaContinuousClick = 0;
                //Bearbeitbare Instanz abrufen
                Editable editable = Editable.Factory.getInstance().newEditable(txt.getText());

                //Verarbeitung zum Löschen des letzten Zeichens bei jedem Drücken der Taste
                if(editable.length() > 0){
                    //Das erste Argument für "Löschen" ist der Beginn des Zeichens, das Sie löschen möchten,Das zweite Argument ist das Ende des Zeichens, das Sie löschen möchten
                    editable.delete(editable.length()-1, editable.length());
                }
                //In TextView einstellen
                txt.setText(editable, TextView.BufferType.EDITABLE);

                break;

            case R.id.buttonClear:
                decimalPointCount = 0;
                ClickedFormulaOnce = 0;
                formulaContinuousClick = 0;
                stringList.clear();

                //Zum Löschen von Bildern
                @SuppressLint("ResourceType")
                ImageView iv = this.findViewById(R.id.imageView);
                iv.setImageDrawable(null);
                txt.setText(null);
                break;

            case R.id.buttonPoint:
                //Beurteilung, die wiederholte Treffer des Dezimalpunkts verhindert.
                if (decimalPointCount == 0) {
                    txt.append(".");
                    decimalPointCount = 1;
                }
                break;

            //Von hier+-/*Was passiert, wenn Sie auf klicken?
            //formulaContinuousClick+-*/=Zur Verhinderung kontinuierlicher Klicks.
            //Einmal auf Formel geklickt+-*/Um festzustellen, ob Sie einmal geklickt haben.
            case R.id.buttonPlus:
                formulaContinuousClick++;
                // +-/*Verarbeitung beim Drücken. Ignorieren Sie für kontinuierliche Taps.
                //Wenn TextView nichts enthält, wird es ignoriert.
                if(formulaContinuousClick == 1 && !(txt.getText().toString().equals(""))) {
                    ClickedFormulaOnce = 1;
                    txt.append("+");
                }
                decimalPointCount = 0; //Gibt die Klickzahl des Dezimalpunkts auf 0 zurück.
                break;

            case R.id.buttonMinus:
                formulaContinuousClick++;
                if(formulaContinuousClick == 1 && !(txt.getText().toString().equals(""))) {
                    ClickedFormulaOnce = 1;
                    txt.append("-");
                }
                decimalPointCount = 0;
                break;

            case R.id.buttonMulti:
                formulaContinuousClick++;
                ClickedFormulaOnce = 1;
                if(formulaContinuousClick == 1 && !(txt.getText().toString().equals(""))) {
                    ClickedFormulaOnce = 1;
                    txt.append("×");
                }
                decimalPointCount = 0;
                break;

            case R.id.buttonDiv:
                formulaContinuousClick++;
                ClickedFormulaOnce = 1;
                if(formulaContinuousClick == 1 && !(txt.getText().toString().equals(""))) {
                    ClickedFormulaOnce = 1;
                    txt.append("÷");
                }
                decimalPointCount = 0;
                break;

            case R.id.buttonEqual:
                if(ClickedFormulaOnce == 1) {
                    formulaContinuousClick++;
                }
                if (ClickedFormulaOnce == 1 && formulaContinuousClick == 1) {
                    formulaContinuousClick = 0;
                    ClickedFormulaOnce = 0;
                    //Verhindert, dass weitere Dezimalstellen hinzugefügt werden, wenn das Berechnungsergebnis eine Dezimalstelle enthält. Beispiel "3.3+0.1=3.4 → Klicken Sie auf den Dezimalpunkt → "3".4."Eine solche
                    decimalPointCount = 1;
                    if(txt.getText().toString().length() > 56) {
                        Context context = getApplicationContext();
                        Toast.makeText(context, "Die Anzahl der Zeichen überschreitet die Obergrenze von 56 Zeichen.", Toast.LENGTH_LONG).show();
                    } else {
                        calculation(txt);
                    }
                }
                break;
        }
    }
}

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:shrinkColumns="0,1,2,3,4">


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:textSize="50sp" />

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>


    <TableRow
        android:id="@+id/row1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2">

        <Button
            android:id="@+id/button7"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:onClick="btnCurrent_onClick"
            android:text="@string/button7"
            android:textSize="25sp" />

        <Button
            android:id="@+id/button8"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:onClick="btnCurrent_onClick"
            android:text="@string/button8"
            android:textSize="25sp" />

        <Button
            android:id="@+id/button9"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:onClick="btnCurrent_onClick"
            android:text="@string/button9"
            android:textSize="25sp" />

        <Button
            android:id="@+id/buttonDiv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:background="#FFBF00"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonDiv"
            android:textSize="25sp" />

        <Button
            android:id="@+id/buttonClear"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:background="#FF4000"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonClear"
            android:textSize="25sp" />
    </TableRow>

    <TableRow
        android:id="@+id/row2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2">

        <Button
            android:id="@+id/button4"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:onClick="btnCurrent_onClick"
            android:text="@string/button4"
            android:textSize="25sp" />

        <Button
            android:id="@+id/button5"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:onClick="btnCurrent_onClick"
            android:text="@string/button5"
            android:textSize="25sp" />


        <Button
            android:id="@+id/button6"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:onClick="btnCurrent_onClick"
            android:text="@string/button6"
            android:textSize="25sp" />

        <Button
            android:id="@+id/buttonMulti"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"

            android:background="#FFBF00"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonMulti"
            android:textSize="25sp" />

        <Button
            android:id="@+id/buttonBS"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"

            android:background="#00ffff"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonBS"
            android:textSize="25sp" />
    </TableRow>

    <TableRow
        android:id="@+id/row3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2">

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:onClick="btnCurrent_onClick"
            android:text="@string/button1"
            android:textSize="25sp" />

        <Button
            android:id="@+id/button2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:onClick="btnCurrent_onClick"
            android:text="@string/button2"
            android:textSize="25sp" />


        <Button
            android:id="@+id/button3"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:onClick="btnCurrent_onClick"
            android:text="@string/button3"
            android:textSize="25sp" />

        <Button
            android:id="@+id/buttonPlus"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:background="#FFBF00"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonPlus"
            android:textSize="25sp" />


        <Button
            android:id="@+id/buttonMinus"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"

            android:background="#FFBF00"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonMinus"
            android:textSize="40sp" />
    </TableRow>


    <TableRow
        android:id="@+id/row4"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <Button
            android:id="@+id/button0"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_span="2"
            android:onClick="btnCurrent_onClick"
            android:text="@string/button0"
            android:textSize="25sp" />

        <Button
            android:id="@+id/buttonPoint"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonPoint"
            android:textSize="40sp" />

        <Button
            android:id="@+id/buttonEqual"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:layout_span="2"
            android:background="#2EFE64"
            android:onClick="btnCurrent_onClick"
            android:text="@string/buttonEqual"
            android:textSize="25sp" />
    </TableRow>

string.xml


<resources>
    <string name="app_name">Caluculator</string>
    <string name="button0">0</string>
    <string name="button1">1</string>
    <string name="button2">2</string>
    <string name="button3">3</string>
    <string name="button4">4</string>
    <string name="button5">5</string>
    <string name="button6">6</string>
    <string name="button7">7</string>
    <string name="button8">8</string>
    <string name="button9">9</string>
    <string name="buttonPlus">+</string>
    <string name="buttonMinus">-</string>
    <string name="buttonMulti">×</string>
    <string name="buttonDiv">÷</string>
    <string name="buttonPoint">.</string>
    <string name="buttonEqual">=</string>
    <string name="buttonClear">C</string>
    <string name="buttonBS">BS</string>
</resources>

Recommended Posts

Ich habe eine Taschenrechner-App für Android erstellt
Ich habe eine passende App erstellt (Android App)
[Android] Ich habe eine Schrittzähler-App erstellt.
Ich habe eine Janken App mit Android gemacht
Ich habe eine Chat-App erstellt.
Ich habe eine Bibliothek zum Anzeigen von Tutorials auf Android erstellt.
Ich habe eine shopify App @java erstellt
Ich habe eine Janken App mit Kotlin gemacht
Ich habe eine Android-App für den MiRm-Dienst erstellt
Ich habe eine Viewer-App erstellt, die PDF anzeigt
Ich habe mit Ruby On Rails ein Portfolio erstellt
ROS App Entwicklung auf Android
Ich habe mit WebAssembly einen Zeichnungschat "8bit Paint Chat" erstellt
Ich habe mit der Lautstärketaste mit der Android-App ein Sperrmuster erstellt. Fragment Edition
Ich habe versucht, TabLayout unter Android eine Trennlinie hinzuzufügen
Ich habe mit Swing eine GUI erstellt
Hinweise zum Aufrufen von Installer in der Android App
Ich habe ein Tool zur Generierung von package.xml erstellt.
[Rails] Ich habe eine einfache Kalender-Mini-App mit benutzerdefinierten Spezifikationen erstellt.
Ich habe versucht, eine einfache Karten-App in Android Studio zu erstellen
Ich habe kürzlich eine JS-App in der gemunkelten Dart-Sprache erstellt
[Ruby] Ich habe einen einfachen Ping-Client erstellt
Versuchen Sie, die Rails-App für EC2-Teil 1 bereitzustellen.
Ich habe mit Ruby einen riskanten Würfel gemacht
Ich habe ein Plug-In für IntelliJ IDEA erstellt
Lassen Sie uns eine Taschenrechner-App mit Java erstellen
Stellen Sie eine Java-Web-App für Heroku bereit
Ich habe ein neues Java-Bereitstellungstool erstellt
Ich habe eine Frage zu Android Studio.
Ermöglicht die automatische Wiedergabe von Youtube auch mit der Android-App von Cordova
Ich habe mit Vue.js eine Seite erstellt, die Informationen zur Zuckereinschränkung zusammenfasst
Ich habe ein Diff-Tool für Java-Dateien erstellt
Ich habe ein Programm zur Beurteilung von Primzahlen in Java erstellt
[Stajun gab auch zu] Ich möchte einen Gourmet-Spiser, aber er kostet 1103,3543 Billionen Yen, also habe ich eine Android-App erstellt
Ich habe StringUtils.isBlank gemacht
04. Ich habe mit SpringBoot + Thymeleaf ein Frontend gemacht
Ich habe Mosaikkunst mit Pokemon-Bildern gemacht
Ich habe selbst eine App gemacht! (Leseverwaltungs-App)
Veröffentlichen Sie die mit Ruby on Rails erstellte App
Ich habe ein Janken-Spiel in Java (CLI) gemacht.
Ich habe versucht, eine LINE-Klon-App zu erstellen
Ich habe einen Docker-Container erstellt, um Maven auszuführen
Ich habe eine Ruby-Erweiterungsbibliothek in C erstellt
Stolpern Sie mit Android DataBinding + Kotlin (mehr BindingAdapter)
[Rails] Ich habe eine Entwurfsfunktion mit enum erstellt
Android: Es fiel mir schwer, die HTML-Datei auf der SD-Karte anzuzeigen
Ich habe eine einfache Grafikbibliothek für Smartphone-Apps erstellt [MP Android Chart Kai]
Ich habe einen LINE Bot mit Rails + Heroku gemacht
Ich habe versucht, Java in einem Mac-Terminal auszuführen
Da ich es oft benutze, notiere ich mir DB-bezogene Dinge auf Android.
Ich habe versucht, eine mit antikem Middleman erstellte Seite in Azure Static Web Apps bereitzustellen
Ich habe eine Frage. Beim Abspielen eines Videos in Listview mit Android tritt ein Fehler auf.
Ich habe ein Docker-Image für die japanische Version von SDAPS erstellt
Ich habe versucht, eine Datenbankverbindung in der Android-Entwicklung zu verwenden
Ich habe ein einfaches Berechnungsproblemspiel in Java gemacht