ورود

View Full Version : بررسی ورودی string و اجرای دستور در برنامه



asdasd123123
سه شنبه 05 آذر 1392, 09:08 صبح
سلام دوستان
من می خوام مثلا کاربر در ورودی وارد کنه 25+16 و در جواب خروجی 41 چاپ شه. من کد زیر رو نوشتم، آیا راه بهتری وجود دارد؟


package calculator;
import java.util.Scanner;
public class Calculator
{
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
String sum;
while(true)
{
sum=scan.next();
if(sum.indexOf("+")!=-1) break;
}
String part1=sum.substring(0,sum.indexOf("+"));
String part2=sum.substring(sum.indexOf("+")+1);
char[] pc1=part1.toCharArray();
char[] pc2=part2.toCharArray();
int[] ip1=new int[pc1.length];
int[] ip2=new int[pc2.length];
for(int i=0;i<pc1.length;i++)
{
if(pc1[i]==48) ip1[i]=0;
else if(pc1[i]==49) ip1[i]=1;
else if(pc1[i]==50) ip1[i]=2;
else if(pc1[i]==51) ip1[i]=3;
else if(pc1[i]==52) ip1[i]=4;
else if(pc1[i]==53) ip1[i]=5;
else if(pc1[i]==54) ip1[i]=6;
else if(pc1[i]==55) ip1[i]=7;
else if(pc1[i]==56) ip1[i]=8;
else if(pc1[i]==57) ip1[i]=9;
else ip1[i]=0;
}
for(int i=0;i<pc2.length;i++)
{
if(pc2[i]==48) ip2[i]=0;
else if(pc2[i]==49) ip2[i]=1;
else if(pc2[i]==50) ip2[i]=2;
else if(pc2[i]==51) ip2[i]=3;
else if(pc2[i]==52) ip2[i]=4;
else if(pc2[i]==53) ip2[i]=5;
else if(pc2[i]==54) ip2[i]=6;
else if(pc2[i]==55) ip2[i]=7;
else if(pc2[i]==56) ip2[i]=8;
else if(pc2[i]==57) ip2[i]=9;
else ip2[i]=0;
}
int adad1=0,adad2=0;
for(int i=0;i<ip1.length;i++) adad1+=ip1[ip1.length-i-1]*Math.pow(10,i);
for(int i=0;i<ip2.length;i++) adad2+=ip2[ip2.length-i-1]*Math.pow(10,i);
System.out.println(adad1+adad2);
}
}

asdasd123123
سه شنبه 05 آذر 1392, 09:10 صبح
البته منظورم از کد بهتر، استفاده از switch به جای if else if نیست. منظورم اینه که آیا تابعی در جاوا هست یا الگوریتم بهتری هست؟

asdasd123123
سه شنبه 05 آذر 1392, 09:17 صبح
یک سوال دیگه در رابطه با این کد:
آیا منظور از زباله روب جاوا اینه که در هنگام کامپایل بررسی میشه که از یک متغییر هرگز استفاده نمی شه پس کامپایلر قطعه کدی در آخرین جای استفاده از اون قرار میده که پاکش کنه یا ساز و کار دیگه ای دارد؟ مثلا من به خاطر این در دوتا for آخر از طول ip1 و ip2 استفاده کردم که pc1 و pc2 از حافظه free بشه آیا کار درستی کردم یا فرقی نداشت؟

cups_of_java
سه شنبه 05 آذر 1392, 12:15 عصر
اون کد رو بهتر از اون هم میشه نوشت. وقتی با + رشته ها رو جدا کردی هر کدوم رو Integer.parseInt می کنی و عدد رو خودش بهت میده بعد جمعشون می کنی.

زباله روب جاوا یه عملیات زمان اجرا هستش... تو مثال شما فرقی نداره. زباله روب در ساده ترین حالت وقتی از هر حوزه تعریفی میاد بیرون برنامه متغیر های local اون حوزه رو حذف می کنه رفرنس هاشون رو... بعد به مرور زمان هروقت نیاز بود میگرده حافظه رو و اون اشیایی که توی حافظه هستن ولی هیچ رفرنسی بهشون نیست رو پاک می کنه