Есть ли способ вернуть массив в другой массив. У меня есть многомерный массив, который я использую метод combineArrays(Comparable[][] x)
для объединения в другой массив 1D.Есть ли способ вернуть массив в другой массив?
Обычно я просто создавал массив 1D в более высокой области видимости, но мне было больно известно, что массивы Comparable нуждаются в измерении при инициализации, а combineArrays()
отвечает за определение размера mutliarray.
Пожалуйста, будьте добры, я еще не закончил. Цель самой программы - принять массив объектов и найти общий список объектов, которые существуют в каждой строке. Трик является findCommonElements()
должен делать это в любом O (NlogN) или O (N) времени
/*
* combs through the original array to find the shortest row which must hold
* the least # of common objects
*/
public static int findSmallestRow(Comparable[][] queries) {
int array_length = 0;
int indexOfMaster = 0;
array_length = queries[0].length; // sets variable to initial arrays row
// length
for (int i = 0; i < queries.length; i++) { // iterates through each row
// comparing size of each
// row
if (queries[i].length <= array_length) { // ensures the 1st row is,
// at minimum, the
// master array
array_length = queries[i].length;
indexOfMaster = i;
}
}
return indexOfMaster;
}
public static void findCommonElements(Comparable[][] queries){
Comparable[] new_query = combineArray(queries);
for(int a = 0; a<new_query.length; a++){
System.out.println(new_query[a]);
}
//Arrays.sort(new_query);
int query_length = new_query.length;
int masterIndex = findSmallestRow(queries);
Comparable extracted[] = new Comparable[queries[masterIndex].length];
System.arraycopy(queries[masterIndex], 0, extracted, 0,
extracted.length);
Comparable[] intermediate_query = new Comparable[masterIndex];
int nonquery_length = extracted.length;
int counter = 0;
int counter2 = 0;
int query_index = 0;
int nonquery_index = 0;
int i =0;
int j = 0;
while(i < nonquery_length && j < query_length){
if(extracted[nonquery_index].compareTo(new_query[query_index])>0){
query_index++;
}
if(extracted[nonquery_index].compareTo(new_query[query_index])<0){
nonquery_index++;
}
if(extracted[nonquery_index].compareTo(new_query[query_index])==0){
counter++;
if(counter == queries.length){
intermediate_query[counter2] = extracted[nonquery_index];
counter2++;
}
}
}
Comparable common_list[] = new Comparable[counter2];
for(int k = 0; k<counter2; k++){
common_list[k] = intermediate_query[k];
System.out.println(common_list[i]);
}
}
//gets size of query array, even if not uniform
public static Comparable[] combineArray(Comparable[][]queries){
int length = queries.length;
ArrayList rows = new ArrayList();
for(int i = 0; i< length; i++){
for(int k = 0; k<queries[i].length; k++){
rows.add("");
}
}
int query_size = rows.size();
Comparable[] new_query = new Comparable[query_size];
int new_query_counter = 0;
for(int i = 0; i< length; i++){
for(int k = 0; k<queries[i].length; k++){
new_query[new_query_counter] = queries[i][k];
}
}
return new_query;
}
Любой образец ввода/вывода или более кода увеличит ваши шансы получить осмысленный ответ (и не будет закрыт). –
Здесь нет ничего особенного в сравнении. Да, вам нужно будет определить, насколько большой должен быть ваш массив - или поместить все элементы в 'ArrayList', которые будут расти, как нужно, а затем вызвать' toArray'. Где именно вы застряли? Разве это «объединение» просто материи или сглаживания? –
Использование arraylist поражает точку сравнения –