当前位置:天才代写 > tutorial > JAVA 教程 > java数组的返回

java数组的返回

2017-11-13 08:00 星期一 所属: JAVA 教程 浏览:325

假定我们此刻想写一个要领,同时不但愿它仅仅返回一样对象,而是想返回一系列对象。此时,象C和C++这样的语言会使问题巨大化,因为我们不能返回一个数组,只能返回指向数组的一个指针。这样就很是贫苦,因为很难节制数组的“存在时间”,它很容易造成内存“裂痕”的呈现。
Java回收的是雷同的要领,但我们能“返回一个数组”。虽然,此时返回的实际仍是指向数组的指针。但在Java里,我们永远不必担忧谁人数组的是否可用——只要需要,它就会自动存在。并且垃圾收集器会在我们完成后自动将其排除。
作为一个例子,请思考如何返回一个字串数组:
 

//: IceCream.java
// Returning arrays from methods

public class IceCream {
  static String[] flav = {
    "Chocolate", "Strawberry",
    "Vanilla Fudge Swirl", "Mint Chip",
    "Mocha Almond Fudge", "Rum Raisin",
    "Praline Cream", "Mud Pie" 
  };
  static String[] flavorSet(int n) {
    // Force it to be positive & within bounds:
    n = Math.abs(n) % (flav.length + 1);
    String[] results = new String[n];
    int[] picks = new int[n];
    for(int i = 0; i < picks.length; i++)
      picks[i] = -1;
    for(int i = 0; i < picks.length; i++) {
      retry:
      while(true) {
        int t =
          (int)(Math.random() * flav.length);
        for(int j = 0; j < i; j++)
          if(picks[j] == t) continue retry;
        picks[i] = t;
        results[i] = flav[t];
        break;
      }
    }
    return results;
  }
  public static void main(String[] args) {
    for(int i = 0; i < 20; i++) {
      System.out.println(
        "flavorSet(" + i + ") = ");
      String[] fl = flavorSet(flav.length);
      for(int j = 0; j < fl.length; j++)
        System.out.println("\t" + fl[j]);
    }
  }
} ///:~

flavorSet()要领建设了一个名为results的String数组。该数组的巨细为n——详细数值取决于我们通报给要领的自变量。随后,它从数组flav里随机挑选一些“香料”(Flavor),并将它们置入results里,并最终返回results。返回数组与返回其他任何工具没什么区别——最终返回的都是一个句柄。至于数组到底是在flavorSet()里建设的,照旧在其他什么处所建设的,这个问题并不重要,因为横竖返回的仅是一个句柄。一旦我们的操纵完成,垃圾收集器会自动看护数组的排除事情。并且只要我们需要数组,它就会乖乖地听候调遣。
另一方面,留意当flavorSet()随机挑选香料的时候,它需要担保以前呈现过的一次随机选择不会再次呈现。为到达这个目标,它利用了一个无限while轮回,不绝地作出随机选择,直到发明未在picks数组里呈现过的一个元素为止(虽然,也可以举办字串较量,查抄随机选择是否在results数组里呈现过,但字串较量的效率较量低)。若乐成,就添加这个元素,并间断轮回(break),再查找下一个(i值会递增)。但假使t是一个已在picks里呈现过的数组,就用标签式的continue往回跳两级,强制选择一个新t。用一个调试措施可以很清楚地看到这个进程。
main()能显示出20个完整的香料荟萃,所以我们看到flavorSet()每次都用一个随机顺序选择香料。为体会这一点,最简朴的要领就是将输出重导向进入一个文件,然后直接寓目这个文件的内容。

 

    关键字:

天才代写-代写联系方式