PDA

View Full Version : مشکل تو برنامه نویسی ماشین حساب ساده



Fire_Falcon
پنج شنبه 27 شهریور 1393, 10:47 صبح
سلام دوستان من تازه برنامه نویسی اندروید رو شروع کردم و دارم یه برنامه ماشین حساب مینویسم
ولی اینجا که رقم های اولین عدد رو میخوام وارد کنم (( با کلید باتن )) نمیدونم چطور باید عدد رو تو یه متغییر اینت بذارم
به عنوان مثال عدد 258 با سه باتن 2و 5 و8 نوشته میشه ولی نمیدونم چطور باید جای گذاریش کنم ...

saeed_g21
پنج شنبه 27 شهریور 1393, 11:14 صبح
خوب این که کاری نداره

اول مقدار EditText رو بخون بعد عدد مورد نظر رو براش اضافه کن چیزی شبیه به مثال زیر

EditText number;
String num = number.getText().toString();
number.setText(num+2);

//اگه دیدی اعداد رو جمع کرد به این صورت بنویس
number.setText(num+""+2);

Fire_Falcon
پنج شنبه 27 شهریور 1393, 12:15 عصر
خوب این که کاری نداره

اول مقدار EditText رو بخون بعد عدد مورد نظر رو براش اضافه کن چیزی شبیه به مثال زیر

EditText number;
String num = number.getText().toString();
number.setText(num+2);

//اگه دیدی اعداد رو جمع کرد به این صورت بنویس
number.setText(num+""+2);


مرسی از شما
txt_amal.setText(txt_amal.getText().toString()+9);

از این استفاده کردم ولی حالا که میخوام محتویاط تکست رو تو یه متغیر اینت بریزم چطور میشه؟
چون این جواب نداد
int number1=txt_amal.getText();
تو سی شارپ با کانورت کردن میشد استرینگ رو به اینت تبدیل کرد وای این رو نمیدونم
راستی برای استفاده از اعداد اعشاری به جای اینت چی میادش؟

saeed_g21
پنج شنبه 27 شهریور 1393, 12:18 عصر
بفرما دوست عزیز

int num = Integer.valueOf(txt_amal.getText());

اعشار با float

Fire_Falcon
پنج شنبه 27 شهریور 1393, 12:54 عصر
بفرما دوست عزیز

int num = Integer.valueOf(txt_amal.getText());

اعشار با float

این خط مشگلی داره وقتی برنامه به این خط میرسه بسته میشه

int number1=Integer.valueOf(txt_amal.getText().toStrin g());

تو این قسمت

btn_plus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int number1=Integer.valueOf(txt_amal.getText().toStrin g());
txt_amal.setText("");

}
});

}

saeed_g21
پنج شنبه 27 شهریور 1393, 13:08 عصر
خطای که در Logcat میده رو بده

omid.n1990
پنج شنبه 27 شهریور 1393, 14:34 عصر
int number1 = Integer.parseInt(txt_amal.getText().toString());

Fire_Falcon
پنج شنبه 27 شهریور 1393, 17:29 عصر
خطای که در Logcat میده رو بده

09-18 09:32:49.312: D/dalvikvm(1985): Not late-enabling CheckJNI (already on)09-18 09:33:05.212: I/Choreographer(1985): Skipped 311 frames! The application may be doing too much work on its main thread.
09-18 09:33:06.602: D/gralloc_goldfish(1985): Emulator without GPU emulation detected.
09-18 09:33:14.042: D/AndroidRuntime(1985): Shutting down VM
09-18 09:33:14.042: W/dalvikvm(1985): threadid=1: thread exiting with uncaught exception (group=0xb0eba648)
09-18 09:33:14.102: E/AndroidRuntime(1985): FATAL EXCEPTION: main
09-18 09:33:14.102: E/AndroidRuntime(1985): java.lang.NumberFormatException: Invalid int: " 123"
09-18 09:33:14.102: E/AndroidRuntime(1985): at java.lang.Integer.invalidInt(Integer.java:138)
09-18 09:33:14.102: E/AndroidRuntime(1985): at java.lang.Integer.parse(Integer.java:375)
09-18 09:33:14.102: E/AndroidRuntime(1985): at java.lang.Integer.parseInt(Integer.java:366)
09-18 09:33:14.102: E/AndroidRuntime(1985): at java.lang.Integer.parseInt(Integer.java:332)
09-18 09:33:14.102: E/AndroidRuntime(1985): at com.FireFalcon.calc.AC_Main$11.onClick(AC_Main.jav a:133)
09-18 09:33:14.102: E/AndroidRuntime(1985): at android.view.View.performClick(View.java:4240)
09-18 09:33:14.102: E/AndroidRuntime(1985): at android.view.View$PerformClick.run(View.java:17721 )
09-18 09:33:14.102: E/AndroidRuntime(1985): at android.os.Handler.handleCallback(Handler.java:730 )
09-18 09:33:14.102: E/AndroidRuntime(1985): at android.os.Handler.dispatchMessage(Handler.java:92 )
09-18 09:33:14.102: E/AndroidRuntime(1985): at android.os.Looper.loop(Looper.java:137)
09-18 09:33:14.102: E/AndroidRuntime(1985): at android.app.ActivityThread.main(ActivityThread.jav a:5103)
09-18 09:33:14.102: E/AndroidRuntime(1985): at java.lang.reflect.Method.invokeNative(Native Method)
09-18 09:33:14.102: E/AndroidRuntime(1985): at java.lang.reflect.Method.invoke(Method.java:525)
09-18 09:33:14.102: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:737)
09-18 09:33:14.102: E/AndroidRuntime(1985): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:553)
09-18 09:33:14.102: E/AndroidRuntime(1985): at dalvik.system.NativeStart.main(Native Method)
09-18 09:33:22.892: I/Process(1985): Sending signal. PID: 1985 SIG: 9




با این کد هم همینه
int number1 = Integer.parseInt(txt_amal.getText().toString());

ho3ein.3ven
پنج شنبه 27 شهریور 1393, 17:40 عصر
قبل از عددتون یک فاصله گذاشتین :
java.lang.NumberFormatException: Invalid int: " 123"
فاصله رو پاک کنید مجدد امتحان کنید .

saeed_g21
پنج شنبه 27 شهریور 1393, 18:07 عصر
موقع دریافت اطلاعات از EditText از rtrim استفاده کنی همه فاصله هارو حذف میکنه و همچنین برای جلوگیری از بیرون انداختن حتما از try استفاده کن و از طرفی نوع edittext رو به اعداد اعشاری تغییر بده

Fire_Falcon
پنج شنبه 27 شهریور 1393, 18:17 عصر
موقع دریافت اطلاعات از EditText از rtrim استفاده کنی همه فاصله هارو حذف میکنه و همچنین برای جلوگیری از بیرون انداختن حتما از try استفاده کن و از طرفی نوع edittext رو به اعداد اعشاری تغییر بده

ممنون میشه با یه مثال کوچیک بهم بگین چطور

saeed_g21
پنج شنبه 27 شهریور 1393, 18:26 عصر
نوعش رو در xml به اعداد تبدیل کنی فکر کنم فاصله بر نمیداره
الان با گوشی امدم

omid.n1990
پنج شنبه 27 شهریور 1393, 18:43 عصر
String strCurrentNumber = txt_amal.getText().toString();
int number1 = Integer.parseInt(strCurrentNumber.trim());


بهتره که نوع تکس باکس رو هم از نوع عددی تنظیم کنید تا فقط قادر باشه عدد بگیره تا خیالتون از اینکه ممکنه غیر عدد وارد بشه راحت بشه.

Fire_Falcon
پنج شنبه 27 شهریور 1393, 20:01 عصر
شرمنده سوالام زیاد شد
من برای اینکه عدد اعشاری رو ثبت کنم از کد زیر استفاده کردم و چون نمیخوام بیشتر از یک بار دکمه دات فشار داده بشه یه متغییر بولین تعریف کردم که بعد از یک بار فشار دادن متغیر رو فالس کنه واجازه دوباره فشار دادن رو نده ولی نمیتونم یا بهتر بگم بلد نیستم فالس بکنم
final boolean chkdot=true;
btn_dot.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if(chkdot)
{
txt_amal.setText(txt_amal.getText().toString()+".");
chkdot=false;// ????????
}

}
});

saeed_g21
شنبه 29 شهریور 1393, 01:03 صبح
نوع EditText رو چی تعیین کردی ؟
اگه اعشاری باشه که فکر نکنم بیش از یک دونه { . } برداره

Fire_Falcon
شنبه 29 شهریور 1393, 11:02 صبح
نوع EditText رو چی تعیین کردی ؟
اگه اعشاری باشه که فکر نکنم بیش از یک دونه { . } برداره
ادیت تکست نیست
از تکست ویو استفاده کردم
عدد ها رو با باتن بهش میدم

saeed_g21
شنبه 29 شهریور 1393, 11:32 صبح
در onclick باتن ممیز خود باتن رو غیر فعال کن
gg.setEnabled(false);
و بعد اینکه باتن مساوی و + و - و * و / و پاک کردن یا هر باتنی که باعث بشه محاسبه از اول انجام بشه و دادن ممیز مشکلی ایجاد نمیکنه زده شد دگمه ممیز فعال
gg.setEnabled(true);
کن

گرفتی منظورم رو ؟

Fire_Falcon
شنبه 29 شهریور 1393, 12:14 عصر
در onclick باتن ممیز خود باتن رو غیر فعال کن
gg.setEnabled(false);
و بعد اینکه باتن مساوی و + و - و * و / و پاک کردن یا هر باتنی که باعث بشه محاسبه از اول انجام بشه و دادن ممیز مشکلی ایجاد نمیکنه زده شد دگمه ممیز فعال
gg.setEnabled(true);
کن
گرفتی منظورم رو ؟

مرسی
فقط برای تغییر مقدار بولین دستور رو به چه صورتی باید بنویسم؟

saeed_g21
شنبه 29 شهریور 1393, 12:37 عصر
همون true , false

Fire_Falcon
شنبه 29 شهریور 1393, 12:47 عصر
همون true , false
یعنی به این صورت ؟
ولی پیغاک خطا میده

finalboolean chk=false;

chk=true;

saeed_g21
شنبه 29 شهریور 1393, 12:51 عصر
boolean btn; btn = false;
gg.setEnabled(btn);

Fire_Falcon
دوشنبه 31 شهریور 1393, 09:38 صبح
ببخشید که این سوالای ابتدایی رو میپرسم
ولی کلافه شدم
تو برنامه نویسی اندروید باید متغییر ها رو جای خاصی معرفی کرد تا بشه تو برنامه مقدارشون رو تغییر داد؟؟؟؟؟
آخه من هرچی متغییر میسازم چه اینت چه بولین فقط هنگام معرفی میتونم بهش مقدار بدم و به محض این که بخوام ازش استفاده بکنم میگه متغییر باید به فینال تغییر پیدا کنه ...
بخوام مقدار بدم بهش هم نمیشه و خطا میگیره
اصلا چرا اینجور میشه ؟؟؟؟؟؟؟؟:گیج:

saeed_g21
دوشنبه 31 شهریور 1393, 10:18 صبح
میتونی اینطوری استفاده کنی

مثال های زیر رو باید زیر کد زیر قرار بدی
public class {اسم اکتیویتی}extends Activity{

private String name;
private int number,i;
private boolean dis;

یا مثلا

final String name;
final int number,i;
final boolean dis;

از private در همه متدها براش دسترسی داری و در final فقط در یک متدی که بکار بردی دسترسی داری

Fire_Falcon
دوشنبه 31 شهریور 1393, 18:28 عصر
مرسی از جوابهاتون
برای مرتب شدن کد ها تو اندروید کلید خاصی وجود نداره؟
تو سی شارپ با کلید " کنترل + کا + دی" کد ها به صورت مرتب شده از لحاظ تو رفتگی و بیرون آمدگی در میان ....

saeed_g21
دوشنبه 31 شهریور 1393, 18:39 عصر
Ctrl + Shift + f :گیج: