У меня есть отсортированный массив, который я хочу проверить для повторных записей. Проблема в том, что мне нужно знать, где дубликат был как многомерный массив, и мне нужно также удалить вторую запись. Кроме того, в конце концов, у меня должен быть массив, заполненный значениями, поэтому просто переписывание дубликатов с помощью некоторого макета не будет работать. Я прочитал около 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 лет, чтобы закончить это, и как это для пользовательского интерфейса приложения вы можете увидеть, что оно должно быть alittle быстрее + по какой-то причине после обработки все это возвращается обратно, пока 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);
}
});
}
}
}
ой и кстати кто-нибудь знает, почему есть дубликаты в массиве? потому что, если я просто использую имена списков на spinner, у меня нет дубликатов
'while (keepRunning2) {': 'keepRunning2' не определен. (и я могу представить, что один, но 'phoneNameNumber' также не был определен ... вы могли бы предоставить фальшивый пример с некоторыми значениями, которые вы хотите удалить, и то, что вы ожидаете). Кстати, если бы я даже попытался ответить на это, мне сначала нужно было бы знать, почему вы используете массив, а не какой-то List/Map/Set, где вы можете стереть элементы. – Ped7g
Самое главное, что нужно учитывать при программировании структуры данных. Не могли бы вы привести пример структурирования данных? –
ну, я действительно присваиваю номер номера телефона 3 раза, потому что я до сих пор не понимаю, как работают массивы .. поэтому первый из них - стереть старый массив (потому что я не хочу, чтобы старые данные все еще были там), тогда я буду инициализируйте массив, а затем присвойте значение. На самом деле я учусь да - в течение недели? no Я не пользуюсь учебниками или лекциями, вместо этого у меня было немного знаний, и я решил создать приложение из того, что знал, и теперь я пытаюсь расширить ученого также, если вы хотите увидеть действительно плохой код - я включил полный класс выше – BAAAZINGA