آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

افزودن چند امکان به ماشین حساب استاد در بخش هفتم آموزش ها

Mostafa  11 سال پیش  9 سال پیش
0 0

سلام

خسته نباشید دوستان

داشتم پروژه ماشین حساب استاد را مینوشتم(راستش توی طول نوشتن برنامه زیاد از سورس کمک گرفتم با وجود نگاه کردن فیلم) ولی خب بازم زیاد از سورس کمک گرفتم ولی تقریبا فهمیدم چی به چیه :)

حالا میخواستم دو تا کار بهش اضافه کنم

اول اینکه یک دکمه پاک کردن یا C توی ماشین حساب اضافه کنم که اضافه کردم و درست هم کار میکرد.ولی میخواستم یه کار دیگه هم بکنم که نتونستم،میخواستم بعد از اینکه فرد "=" رو زد ، اگر بعدش یک عدد وارد کرد ماشین حساب ریست بشه و کار همون "C" رو انجام بده

اینم سورس کدم
برای یه متغییر boolean تعریف کردم که وقتی "=" رو میزنن true میشه و وقتی روی یک عدد کلیک میشه بایک if کار همون دکمه "C" رو انجام میده

ولی نمیدونم چرا درست کار نمیکنه....

چکار باید بکنم؟

این هم سورس

         OnClickListener OperatorClickListener = new OnClickListener() {

@Override
public void onClick(View View) {

Button btn = (Button) View;
String operator = btn.getText().toString();
double number = Double.parseDouble(txtresult.getText().toString());
mustclearlcd = true;
if (mustoverrideoperator) {
lastoperator = operator;
String oldminitxt = txtmini.getText().toString();
String croppedstring = oldminitxt.substring(0, oldminitxt.length() - 1);
txtmini.setText(croppedstring + operator);
return;
}
String oldminitext = txtmini.getText().toString();
txtmini.setText(oldminitext + number + operator);
mustoverrideoperator = true;

if (lastoperator == null) {
lastnumber = number;

} else {
double result = 0;

if (lastoperator.equals("+")) {
result = lastnumber + number;
}
else if (lastoperator.equals("-")) {
result = lastnumber - number;

}
else if (lastoperator.equals("*")) {
result = lastnumber * number;

}
else if (lastoperator.equals("/")) {
result = lastnumber / number;

}
else if (lastoperator.equals("=")) {
clear = true;
}
txtresult.setText("" + result);

lastnumber = result;

}
lastoperator = operator;

}
};

OnClickListener NumberClickListener = new OnClickListener() {

@Override
public void onClick(View View) {
Button btn = (Button) View;
String oldtxt = txtresult.getText().toString();
String btntxt = btn.getText().toString();
mustoverrideoperator = false;
if (clear) {

txtmini.setText("");
txtresult.setText("0");
lastnumber = null;
lastoperator = null;
clear = false;
return;
}
if (mustclearlcd) {
txtresult.setText(btntxt);
mustclearlcd = false;
return;
}
if (btntxt.equals(".")) {
if ( !oldtxt.contains(".")) {
txtresult.setText(oldtxt + btntxt);
return;
}
return;
}

if (oldtxt.equals("0")) {
txtresult.setText(btntxt);
} else {

txtresult.setText(oldtxt + btntxt);

}
}

};

btn0.setOnClickListener(NumberClickListener);
btn1.setOnClickListener(NumberClickListener);
btn2.setOnClickListener(NumberClickListener);
btn3.setOnClickListener(NumberClickListener);
btn4.setOnClickListener(NumberClickListener);
btn5.setOnClickListener(NumberClickListener);
btn6.setOnClickListener(NumberClickListener);
btn7.setOnClickListener(NumberClickListener);
btn8.setOnClickListener(NumberClickListener);
btn9.setOnClickListener(NumberClickListener);
btnpoint.setOnClickListener(NumberClickListener);
btnplus.setOnClickListener(OperatorClickListener);
btndivision.setOnClickListener(OperatorClickListener);
btnminus.setOnClickListener(OperatorClickListener);
btnmultiply.setOnClickListener(OperatorClickListener);
btnequal.setOnClickListener(OperatorClickListener);
btnclear.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View View) {
lastnumber = null;
lastoperator = null;
txtmini.setText("");
txtresult.setText("0");
}
});
}

0 0
منم همین مشکلو دارم اما کسی بلد نبود متاسفانه چند بار مطرح کردم, اینم لینک (11 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
ajn91  11 سال پیش
+2 0

یکم بی دقتی کردید شما گفتی اگر lastOperator مساوی "=" بود حالا بیا clear رو true کن وقتی "=" زده میشه که lastOperator معلوم نیست چی بوده این کد رو داخل numberClickListener قرار بدید تا صحیح عمل کنه

 if (lastOperator != null && lastOperator.equals("=")) {
                    txtMini.setText("");
                    txtResult.setText(btnText);
                    lastNumber = null;
                    lastOperator = null;
                    mustClearLcd = false;
                    return;
                }
پاسخ به سوال 
pari  9 سال پیش
0 0

سلام درواقع دکمه مساوی برای گرفتن نتیجه است ،والا که ریست کردنو دکمه c هم انجام میده و همچنین باید گفت اگه operator مساوی بود این کارارو انجام بده نه lastoperator.درواقع وقتی دکمه مساوی رو زدیم باید txtmini ریست بشه و txtresult نتیجه محاسبه رو به ما نشون بده، و همچنین  mustclearlcd رو true بزاریم تا اگه بعد از مساوی یک عدد دیگه وارد کردیم عدد قبلی ریست بشه ،در ضمن طبق این کد باید result رو فیلد تعریف کنیم نه متغیر محلی. 

if (operator.equals("=")) {
txtResult.setText("" + result);
txtMini.setText("");
lastnumber = 0;
lastoperator = null;
mustclearlcd = true;
mustoverrideoperator = false;
return;
}


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .