我为这个问题写了一个程序:
“编写一个程序,给定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;
}
首先,我不知道应该放在哪里或添加“快速排序”代码。我也有其他程序的这个问题;当我想为现在的方法添加书面方法时。
排在第二位,我不知道我应该在“主要方法”中写什么?
这是我的快速排序代码:
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;
}
实际上,我不知道我应该在我的“主要方法”中写什么来运行这个程序?
答案 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]);
}
}
}
有时使其更简单更有效。 ; - )