如何在计算器上退格?
How to make backspace on calculator?
我正在制作计算器应用程序。
我尝试制作删除按钮,但出现错误。
(1) 如果我在没有数字的情况下按退格键,应用会突然关闭。
(2) 删除号码后按新号码,之前删除的号码又出现
我搜索了很多关于它的内容,但作为初学者我无法理解它们。
如果您能简单地解释一下,我将不胜感激。
public class MainActivity extends AppCompatActivity {
TextView workingsTV;
TextView resultsTV;
String workings = "";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTextView();
}
private void initTextView()
{
workingsTV = (TextView)findViewById(R.id.workingsTextView);
resultsTV = (TextView)findViewById(R.id.resultTextView);
}
private void setWorkings(String givenValue)
{
workings = workings + givenValue;
workingsTV.setText(workings);
}
public void equalsOnClick(View view)
{
Double result = null;
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
try {
result = (Double) engine.eval(workings);
if (result != null)
{
int intVal = (int) result.doubleValue();
if (result == intVal)
{//Check if it's value is equal to its integer part
resultsTV.setText(String.valueOf(intVal));
}
else
{
resultsTV.setText(String.valueOf(result));
}
}
}
catch (ScriptException e) {
Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
}
}
public void deleteOnClick(View view)
{
String del_number = workingsTV.getText().toString();
workingsTV.setText(del_number.substring(0,del_number.length() - 1));
}
问题1是因为del_number.length()
是0,所以del_number.length()-1
是-1,这是子字符串的非法参数。修复它的最简单方法是如果长度为 0,则不执行任何操作。
问题2是因为你在删除的时候没有重置变量的工作方式。它需要设置为“”。或者根本没有那个变量,总是使用 workingsTV.getText() 作为真相的来源。
我找到了解决办法。
我这样编辑代码以防止应用程序突然关闭。
public void deleteOnClick(View view) {
if(workingsTV.getText().toString().length() >= 1) {
String getResultText = workingsTV.getText().toString();
String subString = getResultText.substring(0, getResultText.length() -1);
workingsTV.setText(subString);
}
else
{
workingsTV.setText(CLEAR_INT_TEXT);
}
}
但是我仍然有一个问题,当我按一个新号码时,我删除的字母又回来了。
解决方案是这样的。
workings = workings.substring(0, workings.length() -1);
workings
处的字母也应该像workingsTV
一样删除
所以这里是删除的完整代码
public void deleteOnClick(View view) {
if(workingsTV.getText().toString().length() >= 1) {
String getResultText = workingsTV.getText().toString();
String subString = getResultText.substring(0, getResultText.length() -1);
workingsTV.setText(subString);
workings = workings.substring(0, workings.length() -1);
}
else
{
workingsTV.setText(CLEAR_INT_TEXT);
}
}
我正在制作计算器应用程序。
我尝试制作删除按钮,但出现错误。
(1) 如果我在没有数字的情况下按退格键,应用会突然关闭。
(2) 删除号码后按新号码,之前删除的号码又出现
我搜索了很多关于它的内容,但作为初学者我无法理解它们。
如果您能简单地解释一下,我将不胜感激。
public class MainActivity extends AppCompatActivity {
TextView workingsTV;
TextView resultsTV;
String workings = "";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTextView();
}
private void initTextView()
{
workingsTV = (TextView)findViewById(R.id.workingsTextView);
resultsTV = (TextView)findViewById(R.id.resultTextView);
}
private void setWorkings(String givenValue)
{
workings = workings + givenValue;
workingsTV.setText(workings);
}
public void equalsOnClick(View view)
{
Double result = null;
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
try {
result = (Double) engine.eval(workings);
if (result != null)
{
int intVal = (int) result.doubleValue();
if (result == intVal)
{//Check if it's value is equal to its integer part
resultsTV.setText(String.valueOf(intVal));
}
else
{
resultsTV.setText(String.valueOf(result));
}
}
}
catch (ScriptException e) {
Toast.makeText(this, "Invalid Input", Toast.LENGTH_SHORT).show();
}
}
public void deleteOnClick(View view)
{
String del_number = workingsTV.getText().toString();
workingsTV.setText(del_number.substring(0,del_number.length() - 1));
}
问题1是因为del_number.length()
是0,所以del_number.length()-1
是-1,这是子字符串的非法参数。修复它的最简单方法是如果长度为 0,则不执行任何操作。
问题2是因为你在删除的时候没有重置变量的工作方式。它需要设置为“”。或者根本没有那个变量,总是使用 workingsTV.getText() 作为真相的来源。
我找到了解决办法。
我这样编辑代码以防止应用程序突然关闭。
public void deleteOnClick(View view) {
if(workingsTV.getText().toString().length() >= 1) {
String getResultText = workingsTV.getText().toString();
String subString = getResultText.substring(0, getResultText.length() -1);
workingsTV.setText(subString);
}
else
{
workingsTV.setText(CLEAR_INT_TEXT);
}
}
但是我仍然有一个问题,当我按一个新号码时,我删除的字母又回来了。
解决方案是这样的。
workings = workings.substring(0, workings.length() -1);
workings
处的字母也应该像workingsTV
所以这里是删除的完整代码
public void deleteOnClick(View view) {
if(workingsTV.getText().toString().length() >= 1) {
String getResultText = workingsTV.getText().toString();
String subString = getResultText.substring(0, getResultText.length() -1);
workingsTV.setText(subString);
workings = workings.substring(0, workings.length() -1);
}
else
{
workingsTV.setText(CLEAR_INT_TEXT);
}
}