我正在撰寫一個程式來輸出陣列的常見元素。我已經讓它作業了,但沒有達到應有的標準。目前我有一個函式 getCommonElements 列印字串陣列具有共性的每個字串索引,但我必須回傳一個空字串。我只想將該字串(array3)作為所有常見元素的串列回傳。謝謝你。
--注釋掉的部分是我正在作業但想替換的部分。目前這運行并給出了一個超出范圍的錯誤,我理解為什么,只是想改變它。-
public class GetCommonElement {
public static String[] getCommonElements(String[] array1, String[] array2){
String[] array3 = {""};
for(int i =0; i < array1.length; i ){
for(int j = 0; j < array2.length; j ){
if (array1[i] == array2[j]){
/*System.out.print(array1[i]);
System.out.printf("\n");*/
String temp = array1[i];
for(int k = 0; k < array2.length; k ){
array3[k] = temp;
}
}
}
}
return array3;
}
TLDR:如何比較兩個陣列并將公共元素輸出到新陣列中。
uj5u.com熱心網友回復:
首先,您不應該使用==運算子來比較像String. String物件被快取為短物件,但通常可能存在String具有相同內容但沒有相同記憶體地址的物件,所以==會給你一個false. 您應該使用該String.equals(Object o)方法或 null safe java.util.Objects.equals(Object o1, Object o2)。
此外,您不知道兩個陣列中有多少項匹配,因此array3在執行方法之前您不知道結果的長度。我建議您使用 a Set,或者如果您愿意,使用 aList物件作為結果。
該方法的代碼可能類似于以下內容:
public static String[] getCommonElements(String[] array1, String[] array2) {
List<String> coincidences = new ArrayList<>(
Math.min(array1.length, array2.length)
);
for (int i = 0; i < array1.length; i ) {
for (int j = 0; j < array2.length; j ) {
if (Objects.equals(array1[i], array2[j])
&& !coincidences.contains(array1[i])) {
coincidences.add(array1[i]);
}
}
}
return coincidences.stream().toArray(String[]::new);
}
uj5u.com熱心網友回復:
您可以在此處查看如何附加陣列。所以你可以從一個空陣列開始,String[] array3 = {};而不是array3[k] = temp;你會做類似的事情
array3 = Arrays.copyOf(array3, array3.length 1);
array3[array3.length - 1] =temp;
或者,您可以計算匹配項,然后初始化適當大小的陣列。我在您的代碼中看到的一個問題是,如果每個陣列中存在多個,它會做一些奇怪的事情。例如,如果字串“blah”在每個陣列中存在兩次,它將匹配 4 次。所以出于這個原因,我可能會做這樣的事情來檢查冗余:
public class matching{
public static String[] getCommonElements(String[] array1, String[] array2){
boolean[] matches = new boolean[array1.length];
boolean hasAMatch = false;
boolean isRedundant = false;
int nMatches = 0;
for(int i =0; i < array1.length; i ){
isRedundant = false;
for(int i2=0;i2<i;i2 ){
if(array1[i]==array1[i2]){
isRedundant = true;
break;
}
}
if(!isRedundant){
hasAMatch = false;
for(int j=0; j < array2.length; j ){
if (array1[i] == array2[j]){
hasAMatch = true;
nMatches ;
break;
}
}
if(hasAMatch){
matches[i] = true;
}
}
}
String[] array3 = new String[nMatches];
nMatches = 0;
for(int i =0; i < array1.length; i ){
if(matches[i]){
array3[nMatches] = array1[i];
nMatches ;
}
}
return(array3);
}
public static void main(String []args){
String[] a = {"blah","blah","didy","blah blah"};
String[] b = {"blah","ditty","blagh blah"};
String[] c = getCommonElements(a,b);
for(int i =0; i < c.length; i ){
System.out.println(c[i]);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/429395.html
上一篇:R:為每個唯一因素創建資料框
下一篇:回圈變數以制作許多箱線圖
