我怎么能优化这个java代码?

时间:2016-07-09 03:49:30

标签: java optimization logic

在下面的代码字符串中传递一个方法,其中数字用空格分隔, 现在我们需要提供字符串中最小的两个数字的总和。

public class SumNearZero {
public static int SumNearZero(String s) {
String temp=s;
int t1=0;
for (int i = 0; i <s.length(); i++) {

    if(temp.contains(" "))
    {
        t1++;
        temp=temp.substring(temp.indexOf(" ")+1);
    }
}
int a[]=new int[++t1];
int index=0;
for(int i=0; i<s.length(); i++)
{
if(s.contains(" "))
{
    a[index]=Integer.parseInt(s.substring(0,s.indexOf(" ")));
    s=s.substring(s.indexOf(" ")+1);
    index++;
}

}
a[index]=Integer.parseInt(s);

for (int i = 0; i < a.length; i++) {

for(int j=0; j<a.length-1; j++)
{
    int c=a[j],n=a[j+1];
    if(c>n)
    {
        int t=c;
        a[j]=n;
        a[j+1]=t;

    }   }   }
int result=a.length>1 ? a[0]+a[1]:a[0];
return result;
  }
public static void main(String[] args) {
System.out.println(SumNearZero("35 96 10 20 5"));
       }
         }

上面的代码工作正常,但我想减少代码。如果你对此提出一些建议,我很乐意向你学习。

限制:使用集合,预定义的方法,例如(String.split(),Arrays.sort()...)

3 个答案:

答案 0 :(得分:2)

我建议你不要在构造函数中执行计算和显示,创建一个静态方法并调用它。接下来,在该方法中,通过迭代通过在一个(或多个)空白字符上拆分输入而生成的子串来创建List Integer。然后,对List进行排序。最后,返回前两个元素 1 的总和。对一个数字(或没有数字)进行一些错误检查也是一件好事。这可能看起来像

public static int sumNearZero(String s) {
    List<Integer> al = new ArrayList<>();
    for (String str : s.split("\\s+")) {
        al.add(Integer.parseInt(str));
    }
    if (al.isEmpty()) {
        return 0;
    }
    Collections.sort(al);
    if (al.size() == 1) {
        return al.get(0);
    }
    return (al.get(0) + al.get(1));
}

然后像

一样调用它
public static void main(String[] args) {
    System.out.println(sumNearZero("35 96 10 20 5"));
}

我得到(正如我所料)

  

15

1 一旦排序前两个是最小值,最后两个是最大值

答案 1 :(得分:1)

你可以通过每次使用for each loop而不是for循环来加快速度,不管是数组,列表等的循环增加,都建议使用更快的方法。

此外,您可以通过使用拆分功能获取字符串中的所有数字,然后您可以将您的逻辑用于获取小数字。如果您愿意,这将减少计数并提高速度了解优化然后this是权威指南,我建议你仔细阅读。并看this回答。

答案 2 :(得分:0)

看起来像是一个练习,所以不给出实际的代码。

使用String.split和Arrays.sort