重複したエントリをチェックするソート済み配列があります。問題は、重複配列が多次元配列であった場所を知る必要があり、2番目のエントリも削除する必要があることです。また、最終的には、値でいっぱいの配列を持たなければならないので、いくつかのダミーで重複を上書きするだけではうまくいきません。私は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のためであるとして、あなたはそれがあるべきことがわかりますalittle faster +これをすべて処理した後、何らかの理由でkeeppRunning2がfalseに設定されることはありません。
誰かが解決策を知っていますか?
、データがどこから来るSBたいがわかっている場合:配列内の重複がある理由HERESに活動
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);
}
});
}
}
}
はああとところで誰かが知っているのですか?なぜなら、私は単純にスピンナー上のリスト名を使用すると、重複はありません。
while(keepRunning2){':' keepRunning2'が定義されていませんでした。 (そして、私はそれを想像することができますが、 'phoneNameNumber'も定義されていません。あなたはいくつかの例の値で偽のものを提供していて、削除したいと思います。ところで、もし私がこれに答えることさえしようとするならば、まず要素を消去できるリスト/マップ/セットではなく、なぜ配列を使うのかをまず知る必要があります。 – Ped7g
プログラミング時に考慮すべき最も重要なことは、データの構造です。データの構造の例を教えてください。 –
よく配列の仕組みを完全に理解していないので、私は 'phone name number'を3回割り当てます。最初の配列は古い配列を消去するためです(古いデータがまだそこに残っているのはなぜですか)。配列を初期化し、次に値を代入します。 実際に私は1週間学習していますか?いいえ 私はチュートリアルも講義も使用していません。少し知識があり、私が知っていたことからアプリを構築することに決めました。今度は学習を拡大しようとしています。 また、 – BAAAZINGA