【问题标题】:What's wrong with my method?我的方法有什么问题?
【发布时间】:2015-11-02 21:49:02
【问题描述】:

我对 Java 完全陌生,所以请原谅我在某些方面是个白痴。我应该编写一个静态方法isStrictlyIncreasing(double[] in),如果给定数组中的每个值都大于它之前的值,则返回true,否则返回false。另外,我不能使用java.util.ArrayList

这是我的代码:

public static void main(String[] args) {

    double in[] = new double[]{45, 15, 25, 79, 89, 45, 66, 33, 56, 105};
    Sort(in);
    System.out.println("Answer: " + Sort(in));
}

private static boolean Sort(double[] in) {
    int n = in.length;
    int temp = 0;    
    for(int i = 0; i < n; i++){
        for(int j = 1; j < (n-i); j++){
            if(in[j - 1] < in[j]){
                return true;
            }
            return false;
        }
    }

不幸的是,我只是不断收到“真、真、真...答案:假”的列表

我知道我的方法有问题,可能在 if 语句中,想知道是否有人可以帮助我。

【问题讨论】:

  • 您的内部 for 循环将始终只迭代一次。如果return true 不执行,return false 将始终执行,因此结束循环。你想做什么?
  • "不幸的是,我只是不断得到一个“真,真,真...答案:假””列表,这对于您发布的代码是不可能的,因为它不会甚至编译所以它不能运行并产生任何结果。请用最少但完整的示例更新您的问题,这将使我们重现您的问题。

标签: java arrays methods


【解决方案1】:

首先,在 Java 中,驼峰式方法名称是常见的做法。也就是说,

private static boolean Sort(double[] in) {

应该变成

private static boolean sort(double[] in) {

其次,return 语句用于从方法返回,因此您可能不想在每次检查后返回。相反,你会想做这样的事情,

private static boolean Sort(double[] in) {
    int n = in.length;
    int temp = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < (n - i); j++) {
            if (in[j - 1] > in[j]) {
                return false;
            }
        }
    }
    return true;
}

如果序列中的下一个数字不大于它之前的值,这将返回 false。然后如果它通过for循环而不被触发,那么我们知道它们必须是升序的,因此返回true

【讨论】:

    【解决方案2】:

    您不需要只检查之前的值吗?一旦不满足您的条件,您将返回 false。否则它将返回 true。

       public static void main(String[] args) {
    
            double in[] = new double[]{45, 15, 25, 79, 89, 45, 66, 33, 56, 105};
            Sort(in);
            System.out.println("Answer: " + Sort(in));
        }
    
        private static boolean Sort(double[] in) {
            int n = in.length;
            int temp = 0;    
            for(int i = 1; i < n; i++){
               if(in[i - 1] < in[i])
                  return false;
            }
            return true;
      }
    

    【讨论】:

      【解决方案3】:

      您不需要双循环,因为您只检查连续值。

      private static boolean Sort(double[] in) {
              int n = in.length;
      
              for(int i = 1; i < n-1; i++){
                      if(in[i - 1] < in[i]){
                          return true;
                      }
      
                  }
              return false;
              }
      

      【讨论】:

        猜你喜欢
        • 2014-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多