我有一個排序後的數組,我想檢查重複的entrys。問題是我需要知道重複的位置是多維數組,我需要刪除第二個條目。另外最後,我必須有一個數組填充值,所以只是用一些啞元覆蓋重複項將不起作用。我已經閱讀了有關Array.utils
的技巧,但我不想導入任何其他庫文件,而且Array.utils
不能識別,因此我必須導入該文件。檢查排序後的數組是否重複
我也試着寫一個小功能自己
Integer iIndex = 1;
while (keepRunning2){
if(phoneNameNumber[iIndex][0].equals(phoneNameNumber[iIndex-1][0])){
keepRunning = true;
tmp = new String[phoneNameNumber.length-1][2];
int k = 0;
int t=0;
while(keepRunning){
Log.wtf("running",String.valueOf(iIndex) + ":" + String.valueOf(k));
tmp[t][0] = phoneNameNumber[k][0];
tmp[t][1] = phoneNameNumber[k][1];
if(k!=i-1){
k++;
t++;
}else{
k=k+2;
t++;
}
if(t==tmp.length-1)
keepRunning=false;
}
phoneNameNumber = null;
phoneNameNumber = new String[tmp.length][2];
phoneNameNumber = tmp;
}
if(!(iIndex < phoneNameNumber.length-1)){
keepRunning2 = false;
}
iIndex++;
}
Buuuut ...首先,它需要像10年的時間完成這一點,因爲這是一個應用程序的UI,你可以看到,它應該是由於某種原因,在處理完所有這些後,它會跳回到像keeppRunning2'd永遠不會設置爲false的狀態。
那麼有人知道一個解決方案嗎?
,如果某人想知道數據來自:繼承人的活動
import android.app.ActionBar;
import android.app.Activity;
import android.app.DialogFragment;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CheckedTextView;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ExecutionException;
/**
* Created by **** on 19.07.2016.
*/
public class newChatActivity extends Activity implements View.OnClickListener,AdapterView.OnItemSelectedListener{
Button bCreateChat;
Button bCancelChat;
EditText tchat_name;
//EditText tmembers;
CheckBox cBoxPrivateChat;
Spinner memberSpinner;
String members = "";
String lastContactName = "";
List<String> nameList,number;
String[][]phoneNameNumber,tmp;
String[] sortedNames;
Integer i = 0;
Integer memberCount = 0;
Boolean keepRunning = true;
Boolean keepRunning2 = true;
private static final String[] PROJECTION = new String[] {
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.new_chat);
setTitle("Add New Chat");
bCreateChat = (Button) findViewById(R.id.bCreateChat);
bCancelChat = (Button) findViewById(R.id.bChatCance);
tchat_name = (EditText) findViewById(R.id.tchat_name);
cBoxPrivateChat = (CheckBox) findViewById(R.id.cBoxprivChat);
memberSpinner = (Spinner) findViewById(R.id.memberSpinner);
bCreateChat.setOnClickListener(this);
bCancelChat.setOnClickListener(this);
loadAllContacts();
sortedNames = new String[phoneNameNumber.length];
Integer iIndex = 1;
while (keepRunning2){
if(phoneNameNumber[iIndex][0].equals(phoneNameNumber[iIndex-1][0])){
keepRunning = true;
tmp = new String[phoneNameNumber.length-1][2];
int k = 0;
int t=0;
while(keepRunning){
Log.wtf("running",String.valueOf(iIndex) + ":" + String.valueOf(k));
tmp[t][0] = phoneNameNumber[k][0];
tmp[t][1] = phoneNameNumber[k][1];
if(k!=i-1){
k++;
t++;
}else{
k=k+2;
t++;
}
if(t==tmp.length-1)
keepRunning=false;
}
phoneNameNumber = null;
phoneNameNumber = new String[tmp.length][2];
phoneNameNumber = tmp;
}
if(!(iIndex < phoneNameNumber.length-1)){
keepRunning2 = false;
}
iIndex++;
}
for(int i = 0;i<phoneNameNumber.length;i++){
sortedNames[i] = phoneNameNumber[i][0];
}
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,sortedNames);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
memberSpinner.setAdapter(spinnerAdapter);
memberSpinner.setOnItemSelectedListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bCreateChat:
if (!tchat_name.getText().toString().isEmpty()&&!members.isEmpty()) {
if(cBoxPrivateChat.isChecked()){
createChat("name=" + tchat_name.getText().toString() + "&members=" + members + ScrollingActivity.Identifier + "#");
}
} else{
Toast.makeText(this,"Keine Daten Eingegeben",Toast.LENGTH_SHORT).show();
}
break;
case R.id.bChatCance:
this.finish();
break;
default:
if(v.getId() > 2000000){
members = members.replace("#" + number.get(v.getId() - 2000000) + "#","");
TextView delText = (TextView) findViewById(v.getId());
delText.setVisibility(View.GONE);
memberCount = memberCount - 1;
if(memberCount <= 1){
cBoxPrivateChat.setEnabled(true);
}
}
}
}
public void createChat(String Data){
try {
Boolean b = new createNewCHat().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,ScrollingActivity.ServerLocation + "/alterChat.php", Data).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
Intent intent = new Intent(getApplicationContext(), ScrollingActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position != 0 && !cBoxPrivateChat.isChecked()) {
members = members + "#" + number.get(position) + "#";
TextView MemberText = new TextView(this);
MemberText.setId(2000000 + position);
MemberText.setText(phoneNameNumber[position][0] + " " + phoneNameNumber[position][1]);
LinearLayout memberLayout = (LinearLayout) findViewById(R.id.membersLayout);
RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT, 100);
memberLayout.addView(MemberText, params);
MemberText.setOnClickListener(this);
memberCount++;
if(memberCount > 1){
cBoxPrivateChat.setEnabled(false);
cBoxPrivateChat.setChecked(false);
}
} else if(position != 0 && cBoxPrivateChat.isChecked() && members.equals("")){
members = members + "#" + number.get(position) + "#";
TextView MemberText = new TextView(this);
MemberText.setId(2000000 + position);
MemberText.setText(phoneNameNumber[position][0] + " " + phoneNameNumber[position][1]);
LinearLayout memberLayout = (LinearLayout) findViewById(R.id.membersLayout);
RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT, 100);
memberLayout.addView(MemberText, params);
MemberText.setOnClickListener(this);
memberCount++;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
public void loadAllContacts(){
nameList = new ArrayList<String>();
number = new ArrayList<String>();
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION, null, null, null);
if (cursor != null) {
try {
final int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
final int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
nameList.add(0,"Select chat members");
number.add(0,"");
while (cursor.moveToNext()) {
if(!cursor.getString(nameIndex).equals(lastContactName)){
nameList.add(cursor.getString(nameIndex));
number.add(cursor.getString(numberIndex));
lastContactName = cursor.getString(nameIndex);
}
}
} finally {
cursor.close();
}
phoneNameNumber = new String[nameList.size()][2];
for(int i = 0; i<nameList.size();i++){
phoneNameNumber[i][0] = nameList.get(i);
phoneNameNumber[i][1] = number.get(i);
}
Arrays.sort(phoneNameNumber, new Comparator<String[]>() {
@Override
public int compare(final String[] entry1, final String[] entry2) {
final String time1 = entry1[0];
final String time2 = entry2[0];
return time1.compareTo(time2);
}
});
}
}
}
噢,順便說一下是否有人知道爲什麼有數組中的重複?因爲如果我簡單地使用微調列表上的列表名稱,我沒有任何副本
'而(keepRunning2){':'沒有定義keepRunning2'。 (我可以想象一個,但'phoneNameNumber'還沒有被定義太......你可以提供一些假的值,你想要刪除,以及你期望的)。順便說一句,如果我甚至會嘗試回答這個問題,首先我需要知道,爲什麼要使用數組,而不是某些List/Map/Set,而不是用於擦除元素的地方。 – Ped7g
編程時最重要的是數據的結構。你能提供一個數據結構如何的例子嗎? –
以及我確實分配'電話名稱號碼3次,因爲我還沒有完全理解數組是如何工作的。所以第一個是刪除舊的數組(因爲我不想讓一些舊的數據仍在那裏),那麼我想初始化數組,然後我分配一個值。 其實我正在學習是 - 一週?沒有 我既不使用教程,也沒有講課任何代替我的知識一點點,決定建立一個應用程序出了什麼事情我知道,現在我試圖展開了解到 也如果妳希望看到一些非常糟糕的代碼 - 我包括 – BAAAZINGA