如何使用其他书面方法与现有方法

时间:2015-04-16 03:08:15

标签: java

我为这个问题写了一个程序:
“编写一个程序,给定n个数字和另一个数字x的数组数组[],确定数组中是否存在两个元素,其总和恰好为x。”

这是:

boolean hasArrayTwoCandidates (int array[], int sum) {

    int length = array.length;

    quickSort(array, 0, length-1);

    int first, last;
    first = 0;
    last = length-1; 

    while(first < last){

         if( array[first] + array[last] == sum )
              return true; 
         else if( array[first] + array[last] < sum )
              first++;
         else // array[i] + array[j] > sum
              last--;
    }    
    return false;
}

首先,我不知道应该放在哪里或添加“快速排序”代码。我也有其他程序的这个问题;当我想为现在的方法添加书面方法时。

  1. 我应该在这个“项目”下创建一个“新类”并在那里加上“quicksort”代码吗?
  2. 我应该把它们放在这堂课上吗?但我怎么用呢?
  3. 排在第二位,我不知道我应该在“主要方法”中写什么?

    这是我的快速排序代码:

    public void sort(int[] values) {
    
      if (values == null || values.length == 0){
        return;
      }
    
      this.array = values;
      length = values.length;
      quickSort(this.array, 0, length - 1);
    }
    
    
    private void quickSort(int[] array, int low, int high) {
    
      int i = low, j = high;
      int pivot = array[low + (high-low)/2];
    
        while (i <= j) {                
    
        while (array[i] < pivot) {
          i++;
        }       
    
        while (array[j] > pivot) {
          j--;
        }   
    
        if (i <= j) {
          exchange(i, j);
          i++;
          j--;
        }
      }
    
      if (low < j)
        quickSort(array, low, j);
      if (i < high)
        quickSort(array, i, high);
    }    
    
    private void exchange(int i, int j) {
      int temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
    

    实际上,我不知道我应该在我的“主要方法”中写什么来运行这个程序?

3 个答案:

答案 0 :(得分:4)

你可以将所有这些方法放在同一个类中,make hasArrayTwoCandidates() static(注意main方法是静态的,静态方法只能访问静态方法)

public static boolean hasArrayTwoCandidates (int array[], int sum) {
    ....
}

在您的main方法中,您可以像这样测试它:

public static void main(String[] args){
    int[] arr = {2,5,12,5,2,7,15};
    System.out.print(hasArrayTwoCandidates(arr, 27));
}

答案 1 :(得分:4)

对你来说问题你可以在main方法中做这种编码:

public static void main(String[]args) {
        int x = 20;
        int[] arr = {2,5,4,10,12,5};
        System.out.println(hasArrayTwoCandidates(arr,x));

    } 

制作方法static

static boolean hasArrayTwoCandidates (int array[], int sum)

但是你的编码中有一些问题:

private void exchange(int i, int j) {
  int temp = array[i];
  array[i] = array[j];
  array[j] = temp;
}

此处未定义数组。你会收到一个错误。你必须将数组传递给方法make it as。

private void exchange(int i, int j,int[] array)

但是因为你没有必要做排序。我推荐这个。

static boolean hasArrayTwoCandidates (int array[], int sum) {
        boolean flag = false;
    for(int i=0;i<array.length-1;i++){
        for(int j=i+1;j<array.length ;j++){
            if(array[i]+array[j] == sum)
                flag = true;
        }
    }
    return flag;
}

这将获得一个元素并在添加其他元素时进行检查true 然后主要方法也是这样。

答案 2 :(得分:1)

回答你的问题:你可以编写方法并在同一个类中调用它们,只需用static修饰符编写它们:

    private static <return_type> <methodName> (<type> param1, <type> param2) {
            // Your code here
    }

对于这样的程序,我不明白你为什么要在检查数组之前对数组进行排序的原因,当你可以一次完成所有操作时。看看这段代码,这可能会对你有所启发。这是直截了当的,只是看它是否澄清了你的逻辑。

import java.util.Random;

public class VerifySum {

public static void main(String[] args) {

    Random rand = new Random();
    int[] array = new int[10];

    // Produce a random number from 10 to 20
    int randomSum = rand.nextInt(11) + 10;

    // Fill out the array with random integers from 0 to 10
    for (int i = 0; i < array.length; i++) {
        array[i] = rand.nextInt(11);
    }

    // Check all array indexes against each other
    for (int i = 0; i < array.length - 1; i++) {
        for (int j = i + 1; j < array.length; j++) {
            if (array[i] + array[j] == randomSum) {
                System.out.println(array[i] + " + " + array[j] + " = " + randomSum);
            }
        }
    }

    // Print "x"
    System.out.println("randomSum = " + randomSum);

    // Print array for verification of the functionality
    for (int i = 0; i < array.length; i++) {
        System.out.println("array [" + i + "] = " + array[i]);
    }


}

}

有时使其更简单更有效。 ; - )