java - 从android中的linikedList中删除项目

标签 java android doubly-linked-list

我基本上是一个初学者 Android 开发人员,正在努力从我正在使用的 linkedList 中删除项目。我无法工作的功能是“deleteLast()”,任何帮助将不胜感激。我也可能可以完成相当多的修复,但主要问题是前面提到的问题。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private EditText problemView;
    private String problem;
    private TextView answerView;
    int cursorPosition = 0;
    List<String> operationsList;

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

        //initialising views
        problemView = (EditText) findViewById(R.id.problemView);
        answerView = (TextView) findViewById(R.id.answerView);

        //prevents an underline appearing in the editText
        problemView.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS|InputType.TYPE_NULL);

        //initialise the the linkedList for the data structure
        operationsList = new LinkedList<>();

        problem = "";

        //create numerical buttons
        Button button0 = (Button) findViewById(R.id.button0);
        Button button1 = (Button) findViewById(R.id.button1);
        Button button2 = (Button) findViewById(R.id.button2);
        Button button3 = (Button) findViewById(R.id.button3);
        Button button4 = (Button) findViewById(R.id.button4);
        Button button5 = (Button) findViewById(R.id.button5);
        Button button6 = (Button) findViewById(R.id.button6);
        Button button7 = (Button) findViewById(R.id.button7);
        Button button8 = (Button) findViewById(R.id.button8);
        Button button9 = (Button) findViewById(R.id.button9);

        //create symbolic buttons
        Button buttonDivide = (Button) findViewById(R.id.buttonDivide);
        Button buttonMultiply = (Button) findViewById(R.id.buttonMultiply);
        Button buttonAddition = (Button) findViewById(R.id.buttonAddition);
        Button buttonSubtract = (Button) findViewById(R.id.buttonSubtract);
        Button buttonPoint = (Button) findViewById(R.id.buttonPoint);
        Button buttonScientificNotation = (Button) findViewById(R.id.buttonScientificNotation);
        Button buttonAnswer = (Button) findViewById(R.id.buttonAnswer);

        //create non-displaying buttons
        Button buttonClearAll = (Button) findViewById(R.id.buttonClearAll);
        Button buttonDelete = (Button) findViewById(R.id.buttonDelete);
        Button buttonEquals = (Button) findViewById(R.id.buttonEquals);

        //onClickListener for showable buttons, numbers, signs etc.
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Button b = (Button) view;
                String value = b.getText().toString();

                operationsList.add(problemView.getSelectionStart(), value);
//                problem += b.getText().toString();
                cursorPosition = problemView.getSelectionStart() + 1;
                displayArray();
            }
        };

//        //onClickListener for scientific notation button since need to advance cursor more
//        View.OnClickListener listenerScientific = new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Button b = (Button) view;
//                String value = b.getText().toString();
//
//                operationsList.add(problemView.getSelectionStart(), value);
////                problem += b.getText().toString();
//                cursorPosition = problemView.getSelectionStart() + 1;
//                displayArray();
//            }
//        };

        button0.setOnClickListener(listener);
        button1.setOnClickListener(listener);
        button2.setOnClickListener(listener);
        button3.setOnClickListener(listener);
        button4.setOnClickListener(listener);
        button5.setOnClickListener(listener);
        button6.setOnClickListener(listener);
        button7.setOnClickListener(listener);
        button8.setOnClickListener(listener);
        button9.setOnClickListener(listener);
        buttonDivide.setOnClickListener(listener);
        buttonMultiply.setOnClickListener(listener);
        buttonAddition.setOnClickListener(listener);
        buttonSubtract.setOnClickListener(listener);
        buttonPoint.setOnClickListener(listener);
        buttonScientificNotation.setOnClickListener(listener);
        buttonAnswer.setOnClickListener(listener);

        View.OnClickListener nonListener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (view.getId() == R.id.buttonClearAll){
                    clearAll();
                    displayArray();
                }
                if (view.getId() == R.id.buttonDelete){
                    deleteLast();
                }
                if (view.getId() == R.id.buttonEquals){

                }
            }
        };

        buttonClearAll.setOnClickListener(nonListener);
        buttonDelete.setOnClickListener(nonListener);
        buttonEquals.setOnClickListener(nonListener);
    }


    public void displayArray(){
        Iterator<String> iterator = operationsList.listIterator();
        String temp = "";
        while (iterator.hasNext()){
            temp += iterator.next();
        }
        problemView.setText(temp);
        problemView.setSelection(cursorPosition);
    }

//    public boolean delete(){
//        stringProblemArray[spaceUsed-1] = null;
//        spaceUsed -= 1;
//        problemView.setSelection(problemView.getSelectionStart() - 1);
//        return true;
//    }
//
    public void clearAll(){
        operationsList.clear();
        cursorPosition = 0;
    }

    public void deleteLast(){
        Iterator<String> iterator = operationsList.listIterator();
        int index = 0;
        while (iterator.hasNext()){
            if (index == cursorPosition-1){
                iterator.remove();
            }else {
                iterator.next();
            }
        }
        displayArray();
//        if (iterator.hasNext()){
//            for (int i =0; i == cursorPosition; i++){
//                iterator.next();
//            }
//            iterator.remove();
//        }
//        for(Iterator<String> iter = operationsList.iterator(); iter.hasNext();) {
//            String data = iter.next();
//            if ( == rec1) {
//                iter.remove();
//            }
//        }
    }
}

最佳答案

LinkedList 已经有 removeLast()方法,不用写你的,直接写

operationsList.removeLast()

仅此而已。

此外,如果您不想将列表转换为 LinkedList(即使您实际上正在使用 LinkedList),您可以使用索引删除最后一个元素

operationsList.remove(operationsList.size()-1);

关于java - 从android中的linikedList中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45141379/

相关文章:

java - 尝试使用相同的 ajax 调用取消关注时,关注/取消关注按钮不起作用

java - 使用 mockito 操作参数的 stub 方法

java - mysql数据库中的复杂查询

java - PGP,验证证书上的签名

android - GCM 安卓 : onRegistered() not being called

android - 销毁数据库-android生命周期

android - 从 RecyclerView 项目传递参数

c - 如何保存指向最后一个节点的指针

swift - 如何在swift中实现双向链表?

c - 双链表-C