2017-03-05 1 views
-1

내가 어떤 이유로, 프로그램이 아래 ...안드로이드에 버그가 있습니까?

listIntercedeOut에 값 4와 0을 추가해야 내이 프로그램을 조건 검증을 통해 지나가는 옆 조건의 라인을 실행 추측하지만 후 바로 제거 우리는 모두 01을 사용하지 않으면 우리는 빈 for() 직후 listIntercedeOut.add() 방법을 넣으면 ...

  • 목록에 추가, 그것은 또한 ...

  • 을 한 후 을 제거하지 않습니다 2,343,393,661,355,562,793,732,573,210 라인 내 메인 프로그램에서 수정을 많이했습니다,

나는 목록의 값을 확인하기 위해 텍스트 뷰와 버튼과 약간의 인터페이스를했습니다 ... 코드 중 하나를 작동 코드에 댓글을 달았습니다. .. "거의 빈 상태"조건이 필요합니다.

또한이 예제에서는 intercede(boolean) 메서드가 항상 true를 반환합니다.

AddDisciplina.java :

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.SparseArray; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

public class AddDisciplina extends AppCompatActivity { 

Button buttonCheck; 

TextView text; 

private List<Integer> listIntercedeIn = new ArrayList<>(); 
private List<Integer> listIntercedeOut = new ArrayList<>(); 
private SparseArray<String> sparseSeg=new SparseArray<>(); 

String time = "00:00"; 
String time2 = "01:30"; 
int var = 3; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_add_disciplina); 
    if(getSupportActionBar() != null) { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    getSupportActionBar().setHomeButtonEnabled(true); 

    buttonCheck = (Button)findViewById(R.id.buttonCheck); 
    text = (TextView)findViewById(R.id.text); 

    buttonCheck.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String items=""; 
      for(int i = 0; i < listIntercedeOut.size(); i++){ 
       items = items + "-" + String.valueOf(listIntercedeOut.get(i)); 
      } 
      text.setText(items); 
     } 
    }); 
    sparseSeg.put(0, "01:00/02:00"); 
    sparseSeg.put(4, "00:00/01:30"); 
    abrirTimePicker(false); 
} 

private void abrirTimePicker(final boolean inicio){ 
    if(inicio) { 
     if (time.equals("")) { 
     } 
    } else { 
     if((1<0)||(1==0 && 30<=0)){ 
     } 
     switch (var){ 
      case 3: 
       for (int i = 0; i < sparseSeg.size(); i++) { 
       String[] hs = sparseSeg.valueAt(i).split("/"); 
       int idDoLL = sparseSeg.keyAt(i); 
       if ((inicio && !hs[1].equals("vazio") && intercede(hs[0], hs[1], time, time2)) || 
         (!inicio && !hs[1].equals("vazio") && intercede(time, time2, hs[0], hs[1]))) { 
        if (inicio) { // DO SOMETHING 
        } else { 
         // SHOULD ALWAYS END HERE // 
         listIntercedeOut.add(4); 
         listIntercedeOut.add(idDoLL); 

       // IF WE RELEASE THIS FOR, EVERYTHING WORKS FINE 

           /*for(i = 1; i < listIntercedeOut.size(); i++) { 
           }*/ 
        } 
       } else if (inicio && listIntercedeIn.contains(4) && listIntercedeIn.contains(0)) { 
        listIntercedeIn.remove(Integer.valueOf(4)); 
        listIntercedeIn.remove(Integer.valueOf(idDoLL)); 


       } else if (!inicio && listIntercedeOut.contains(4) && listIntercedeOut.contains(0)) { 

    // IF WE DISABLE THE FOLLOWING 2 LINES, EVERYTHING WORKS FINE 

        listIntercedeOut.remove(Integer.valueOf(4)); 
        listIntercedeOut.remove(Integer.valueOf(0)); 
       } 
      } 
       break; 
     } 
    } 
} 

private boolean intercede (String horario1, String horario2, String horario3, String horario4){ 
    String[] hm1 = horario1.split(":"); 
    int horas1 = Integer.parseInt(hm1[0]); 
    int minutos1 = Integer.parseInt(hm1[1]); 
    int ms1 = (horas1 * 3600000) + (minutos1 * 60000); 

    String[] hm2 = horario2.split(":"); 
    int horas2 = Integer.parseInt(hm2[0]); 
    int minutos2 = Integer.parseInt(hm2[1]); 
    int ms2 = (horas2 * 3600000) + (minutos2 * 60000); 

    String[] hm3 = horario3.split(":"); 
    int horas3 = Integer.parseInt(hm3[0]); 
    int minutos3 = Integer.parseInt(hm3[1]); 
    int ms3 = (horas3 * 3600000) + (minutos3 * 60000); 

    String[] hm4 = horario4.split(":"); 
    int horas4 = Integer.parseInt(hm4[0]); 
    int minutos4 = Integer.parseInt(hm4[1]); 
    int ms4 = (horas4 * 3600000) + (minutos4 * 60000); 

    return (ms1<ms3 && ms3<ms2) || (ms1<ms4 && ms4<ms2); 
} 
} 

add_disciplina_layout.xml :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/text"/> 
    <Button 
     android:id="@+id/buttonCheck" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="CHECK LIST"/> 
</LinearLayout> 

사람이 여기에 무슨 일이 일어나고 있는지 설명해 주시겠습니까? 미리 감사드립니다

답변

1

아마도 세 번째 조건 루프와 일치하는 sparseSeg 목록의 가치가있을 수 있습니다. 의 일이 무엇을보고 일부 로그를 넣어 :

for (int i = 0; i < sparseSeg.size(); i++) { 
       String[] hs = sparseSeg.valueAt(i).split("/"); 
       int idDoLL = sparseSeg.keyAt(i); 
       if ((inicio && !hs[1].equals("vazio") && intercede(hs[0], hs[1], time, time2)) || 
         (!inicio && !hs[1].equals("vazio") && intercede(time, time2, hs[0], hs[1]))) { 
        if (inicio) { // DO SOMETHING 
        } else { 
         // SHOULD ALWAYS END HERE // 
         listIntercedeOut.add(4); 
         listIntercedeOut.add(idDoLL); 

         Log.i("1 CONDITION", i + ""); 
       // IF WE RELEASE THIS FOR, EVERYTHING WORKS FINE 

           /*for(i = 1; i < listIntercedeOut.size(); i++) { 
           }*/ 
        } 
       } else if (inicio && listIntercedeIn.contains(4) && listIntercedeIn.contains(0)) { 
        listIntercedeIn.remove(Integer.valueOf(4)); 
        listIntercedeIn.remove(Integer.valueOf(idDoLL)); 

        Log.i("2 CONDITION", i + ""); 

       } else if (!inicio && listIntercedeOut.contains(4) && listIntercedeOut.contains(0)) { 

    // IF WE DISABLE THE FOLLOWING 2 LINES, EVERYTHING WORKS FINE 

        listIntercedeOut.remove(Integer.valueOf(4)); 
        listIntercedeOut.remove(Integer.valueOf(0)); 

        Log.i("3 CONDITION", i + ""); 
       } 
      } 

내가 지금, 당신의 가치하거나 목록에서 제거 마지막 조건에 적어도 하나 개의 값이 일치 생각합니다. 루프 시스템 상태를 재 작업해야합니다.

희망이 도움이됩니다.

영어 불쌍한 학생들에게 죄송합니다.

(나는 약간의 보정을했다)

+0

하지만 만약 내가 "릴리스"그()에 즉, 값이 목록에 넣어 주석 ... 그래서 사실은 바로 그 조건 = ( –

+0

도달하고, 당신이 옳았다. 첫 번째 루프는 CONDITION 1에, 두 번째 루프는 CONDITION 3 ... 중간에있는 for()는 첫 번째 루프에서 i = 0 값을 변경했으며 두 번째 ... 대단히 감사합니다. (: –

+0

당신은 환영합니다 :) 이 답변으로 문제가 해결되면 체크 표시를 클릭하고 위 표를 통해 수락하는 것을 고려하십시오. 해결책을 찾았습니다. 이럴 필요는 없습니다. – Cochi