ورود

View Full Version : دستور switch و عدم ساپورت string



_Developer_
شنبه 19 مهر 1393, 10:57 صبح
مخیوام در دستور ساپورت یه استرینگی چک بشه در صورت وجود یه سری عملیان انجام بده...اما وقتس استرینگ رو میزارم دستور سوئیچ م خطا میده...


switch (spinner.getSelectedItem().toString()) {
.
.
.
{


124435

ممنون میشم راهنمایی بفرمایید

gilas1368
شنبه 19 مهر 1393, 11:10 صبح
ببینید این کار میکنه:

String.valueof(spinner.getSelectedItem())

parvizwpf
شنبه 19 مهر 1393, 11:11 صبح
اینو مطالعه کنید:
http://stackoverflow.com/questions/10240538/use-string-in-switch-case-in-java

_Developer_
شنبه 19 مهر 1393, 11:23 صبح
ببینید این کار میکنه:
String.valueof(spinner.getSelectedItem())نه بازم همون خطا رو میده :(
اینو مطالعه کنید:http://stackoverflow.com/questions/10240538/use-string-in-switch-case-in-java

value رو اشتباه میگیره :(

saeed_g21
شنبه 19 مهر 1393, 11:29 صبح
می تونی از if هم استفاده کنی مثلا:
if(1==1){}else if(2==2){}else if(3==3)

_Developer_
شنبه 19 مهر 1393, 11:43 صبح
می تونی از if هم استفاده کنی مثلا:
if(1==1){}else if(2==2){}else if(3==3)
در راستای حل مشکل این تاپیکم (http://barnamenevis.org/showthread.php?471944-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A7%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-spinner) از سوئیچ استفاده کردم...با اون حجم بررسی شرط ها استفاده از if یکم پیچ در پیچ میشه....

_Developer_
شنبه 19 مهر 1393, 12:13 عصر
راه دیگه پیشنهاد نمیکنید...

dasssnj
شنبه 19 مهر 1393, 15:28 عصر
دستور سوییچ زمانی استرینگ را پشتیبانی می کنه که از جاوا 7 استفاده کنید . وقتی شما داری از جاوا 6 استفاده می کنی این امکان وجود نداره .
نمی دونم چجوری میشه تو اندروید از جاوا 7 استفاده کرد احتمالا بشه این کارو کرد . یه سرچی بزنید.

Nevercom
شنبه 19 مهر 1393, 15:29 عصر
استفاده از String در ساختار Switch از جاوا ۱.۷ به بعد ساپورت میشه، پس باید از جاوا ۷ استفاده کنید.

اگر به هردلیلی نمیخواید از جاوا ۷ استفاده کنید، راه حل جایگزین در لینکی که دوستمون به سایت StackOverflow داده بودن هست

_Developer_
شنبه 19 مهر 1393, 17:54 عصر
دستور سوییچ زمانی استرینگ را پشتیبانی می کنه که از جاوا 7 استفاده کنید . وقتی شما داری از جاوا 6 استفاده می کنی این امکان وجود نداره .
نمی دونم چجوری میشه تو اندروید از جاوا 7 استفاده کرد احتمالا بشه این کارو کرد . یه سرچی بزنید.

سرچ زدم...چند تا سوال توی سایت stackoverflow که به همین مشکل بنده اشاره میکرد...که چند تا راه حل داشت که متاسفانه برای من جواب نداد...کلان بعد از خروجی گرفتن اجرا نمیشد...!!!


استفاده از String در ساختار Switch از جاوا ۱.۷ به بعد ساپورت میشه، پس باید از جاوا ۷ استفاده کنید.

اگر به هردلیلی نمیخواید از جاوا ۷ استفاده کنید، راه حل جایگزین در لینکی که دوستمون به سایت StackOverflow داده بودن هست

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

private enum Fruit { apple, carrot, mango, orange; }

طوری بنویسم که به اسپاینرم متصل باشه؟!

Nevercom
شنبه 19 مهر 1393, 19:23 عصر
در این حالت از if-else استفاده کنید.

اما به شدت پیشنهاد می کنم به جاوا ۷ سوییچ کنید، می دونید که پیشنیاز Android L جاوا ۷ هست.
من مشکلی نداشتم با ست کردن جاوا ۷ برای پروژه م، اما ظاهراً تو ویندور ارور میده.

به هرحال زمانی باید این کار انجام بشه، پس توصیه می کنم الان جاوا ۷ رو برای پروژه تون انتخاب کنید و اگر خطایی داد سعی کنید برای رفع اون خطا جستجو کنید.

_Developer_
یک شنبه 20 مهر 1393, 08:33 صبح
در این حالت از if-else استفاده کنید.

اما به شدت پیشنهاد می کنم به جاوا ۷ سوییچ کنید، می دونید که پیشنیاز Android L جاوا ۷ هست.
من مشکلی نداشتم با ست کردن جاوا ۷ برای پروژه م، اما ظاهراً تو ویندور ارور میده.

به هرحال زمانی باید این کار انجام بشه، پس توصیه می کنم الان جاوا ۷ رو برای پروژه تون انتخاب کنید و اگر خطایی داد سعی کنید برای رفع اون خطا جستجو کنید.

فعلا متاسفانه دارم از همون if else های متداخل استفاده میکنم...:( چقدم بد و غیر مهندسی هست این کار یه هشتاد خطی فقط شرط ها شد :|

میرم یکم در مورد جاوا هفت تحقیق میکنم... اپدیت شم به اون ورژن

سپاسگذار :)

arash63
یک شنبه 20 مهر 1393, 14:54 عصر
برادر از jdk 1.5 به بعد ورودی سوییچ میتونه string باشه. به احتمال 100% شما داری از jdk زیر 1.6 استفاده می کنی. ارتقا بده مشکلت حل می شه.
در هر صورت اگر تعداد شرط ها زیاد هست، به قول شما از نظر مهندسی استفاده از if و switch به هیچ عنوان پیشنهاد نمی شه و شما باید از Design pattern های oop مثل Command Pattern و یا از reflection استفاده کنید .
اگر در موردشون توضیح بیشتری خواستی بگو برات Sample بزارم

Nevercom
یک شنبه 20 مهر 1393, 15:20 عصر
برادر از jdk 1.5 به بعد ورودی سوییچ میتونه string باشه. به احتمال 100% شما داری از jdk زیر 1.6 استفاده می کنی. ارتقا بده مشکلت حل می شه.

خیر، استفاده از String برای شرط Switch از جاوا ۷ اضافه شده، با jre 1.6 و پایینتر جواب نمیده.

arash63
یک شنبه 20 مهر 1393, 16:08 عصر
خیر، استفاده از String برای شرط Switch از جاوا ۷ اضافه شده، با jre 1.6 و پایینتر جواب نمیده.

بله درسته اشتباه از من بود از 1.7 به بعد ساپورت می کنه

_Developer_
یک شنبه 20 مهر 1393, 16:51 عصر
برادر از jdk 1.5 به بعد ورودی سوییچ میتونه string باشه. به احتمال 100% شما داری از jdk زیر 1.6 استفاده می کنی. ارتقا بده مشکلت حل می شه.
در هر صورت اگر تعداد شرط ها زیاد هست، به قول شما از نظر مهندسی استفاده از if و switch به هیچ عنوان پیشنهاد نمی شه و شما باید از Design pattern های oop مثل Command Pattern و یا از reflection استفاده کنید .
اگر در موردشون توضیح بیشتری خواستی بگو برات Sample بزارم

میشه لطفا در مورد دیزاین پترن ها بیستز توضیح بدین...اولین بار به گوشم میخوره!! اگه هم سمپلی دارین ممنون میشم بزارین

arash63
دوشنبه 21 مهر 1393, 14:22 عصر
ببینید design pattern ها یک سری الگو هستند که در مدل برنامه نویسی شی گرا به صورت استاندارد در اومدند که شما کد رو اصولی بنویسید. pattern های زیادی وجود دارند که شما هم حتماْ اسمشون به گوشتون خورده مثلاْ از معروفترین ها می شه از single tone - factory - observer , و ... نام برد . command pattern یک پترنی هست که وقتی شما جایی تعداد زیادی if دارید این پترن یا استفاده از reflection توصیه شده . من از هر دو برای شما مثالی میزنم :
Command pattern Example :


public interface Command {
void execute();
}




public class Command1 implements Command {
@Override
public void execute() {
System.out.println("man command 1 hastam");
}
}




public class Command2 implements Command {
@Override
public void execute() {
System.out.println("man command 2 hastam");
}
}




public class Main {
public static void main(String[] args) {
HashMap<Integer,Command> commandMap = new HashMap<Integer, Command>();
commandMap.put(1,new Command1());
commandMap.put(2,new Command1());
//commandMap.put(3,new Command1());
// ...

// farz konid value ke gharar ast rooye an shart check shavad alan 1 ast pas :

commandMap.get(1).execute();
}
}






استفاده از reflection برای شروط زیاد :




package test;


public class Class1 {
public void execute(){

}
}





package test;


public class Class2 {
public void execute(){

}
}




package test;

import java.lang.reflect.Method;

public class Main {
public static void main(String[] args) {
int val = 1;
try {
Class noparams[] = {};
// farz konid value ke bayad check shavad 1 ast
Class cls = Class.forName("test.Class"+val);
Object obj = cls.newInstance();
Method method = cls.getDeclaredMethod("execute", noparams);
method.invoke(obj, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}



موفق باشید

_Developer_
سه شنبه 22 مهر 1393, 08:26 صبح
پیشاپیش شرمنده از اینکه اسپم میکنم...اما دلم نیومد توضیح کاملتون رو بی پاسخ بزارم...
انشالله بررسی میکنم و میخونمش...
ممنونم :)