Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Loại bỏ phần tử 0 trong mảng

    Mình có đoạn code sau:

    Mã:
    String detail = "Mức nhiên liệu:"                        + Math.round(arrValue.get(i).GetFuelLevel())                        + " l\
     Q.Đường đi được trong ngày:"                        + Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()))//here                        //+ mileage[i]                        + " km\
    Thời gian: "                        + ConvertFromEpoch(arrValue.get(i).getTimeStamp())                        + "\
    Địa điểm:"                        + GetUTF8FromNCRDecimalString(arrValue.get(i)                                .getAddress()) + "\
    Trạng thái: "                        + GetUTF8FromNCRDecimalString(statusDescription);
    đoạn này có vấn đề với
    Mã:
    Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()))
    do thỉnh thoảng nó trả lại giá trị 0, do đó mình viết thêm đoạn này:

    Mã:
    long mileage[] = new long[1000];//store value of mileages                mileage[i] = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));                if(mileage[i] == 0)                {                    mileage[i] = mileage[i-1];                }
    để khi giá trị bằng 0, mình set cho nó giá trị trước nó. Vấn đề là mình không hiểu sao mileage[i] không trả lại giá trị nào(không get được value), mong được giúp đỡ!
    cả đoạn code như sau:

    Mã:
    for (int i = 0; i < arrValue.size(); i++) {                String statusDescription = StatusCode.getDescription(AccountID,                        arrValue.get(i).GetStatusCode(), privLabel, null);                long mileage[] = new long[1000];//store value of mileages                mileage[i] = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));                if(mileage[i] == 0)                {                    mileage[i] = mileage[i-1];                }                                String detail = "Mức nhiên liệu:"                        + Math.round(arrValue.get(i).GetFuelLevel())                        + " l\
     Q.Đường đi được trong ngày:"                        //+ Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()))//here                        + mileage[i]                        + " km\
    Thời gian: "                        + ConvertFromEpoch(arrValue.get(i).getTimeStamp())                        + "\
    Địa điểm:"                        + GetUTF8FromNCRDecimalString(arrValue.get(i)                                .getAddress()) + "\
    Trạng thái: "                        + GetUTF8FromNCRDecimalString(statusDescription);}

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn chỉ sai có 1 "tí" thôi.

    Mã:
    // Các gia trị tạm:// Giá trị tạmlong lTemp = 0;// Lưu chỉ số tạm cho các phần tử được thêm.int c;long mileage[] = new long[1000];for (int i = 0; i < arrValue.size(); i++) {                String statusDescription = StatusCode.getDescription(AccountID,                        arrValue.get(i).GetStatusCode(), privLabel, null);                // Mỗi lần lặp thì tạo mới, tất cả phần tử sẽ là 0. 1000 phần tử vô nghĩa.                // Mỗi lần lặp tạo đến 1000 phần tử, nếu lặp 100 lần thì sẽ thành 100 * 1000 = 100000.                // Sau khi lặp xong, tức khoảng 8 * 100000 = 800000KB RAM (0.8MB) bị phung phí.                // Lặp càng nhiều càng phung phí và có thể gây hét bộ nhớ (OutOfMemoryError).                // long mileage[] = new long[1000];                                // Sai                // mileage[i] = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));                // if(mileage[i] == 0)                // {                //     mileage[i] = mileage[i-1];                // }                                // Nếu muốn nó = 0 thì sẽ không thêm thì làm:               lTemp = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));               if (lTemp != 0) {                   mileage[c++] = lTemp;               }                               // Đoạn này cũng vô nghĩa. Có gán mà khong sử dụng, không in ra hay lưu vào đâu hết.                String detail = "Mức nhiên liệu:"                        + Math.round(arrValue.get(i).GetFuelLevel())                        + " l\
     Q.Đường đi được trong ngày:"                        //+ Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()))//here                        + mileage[c]                        + " km\
    Thời gian: "                        + ConvertFromEpoch(arrValue.get(i).getTimeStamp())                        + "\
    Địa điểm:"                        + GetUTF8FromNCRDecimalString(arrValue.get(i)                                .getAddress()) + "\
    Trạng thái: "                        + GetUTF8FromNCRDecimalString(statusDescription);}
    Đấy là một "tí" sai từ đầu đến cuối của bạn.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    nhưng bác ơi, mileage đã được khai báo đâu mà có đoạn
    Mã:
    mileage[c++] = lTemp;
    ạ?

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Khai báo ở ngoài for. Mình quên, đã sửa.

    Như vẫn chưa hiểu bạn làm gì nữa.
    Tức là quãng đường đi được bằng 0 thì không có đoạn dài ngoằng (String detail...) ở dưới phải không? Vậy thì bỏ nó vào if.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    mileage chỉ dùng 1 lần mà tạo ra mảng 1000 phần tử e là quá tốn tài nguyên. Bạn thử cách này xem sao

    Mã:
    int mileage;for (int i = 0; i < arrValue.size(); i++) {                String statusDescription = StatusCode.getDescription(AccountID,                        arrValue.get(i).GetStatusCode(), privLabel, null);        if( i == 0)                    mileage = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));        else{                    int temp = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));            if( temp != 0 ) mileage = temp;        }                               String detail = "Mức nhiên liệu:"                        + Math.round(arrValue.get(i).GetFuelLevel())                        + " l\
     Q.Đường đi được trong ngày:"                        //+ Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()))//here                        + mileage                        + " km\
    Thời gian: "                        + ConvertFromEpoch(arrValue.get(i).getTimeStamp())                        + "\
    Địa điểm:"                        + GetUTF8FromNCRDecimalString(arrValue.get(i)                                .getAddress()) + "\
    Trạng thái: "                        + GetUTF8FromNCRDecimalString(statusDescription);}

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi SITUVNX
    Khai báo ở ngoài for. Mình quên, đã sửa.

    Như vẫn chưa hiểu bạn làm gì nữa.
    Tức là quãng đường đi được bằng 0 thì không có đoạn dài ngoằng (String detail...) ở dưới phải không? Vậy thì bỏ nó vào if.
    không phải bác ạ, nếu check nó bằng 0(mileage) thi gán cho nó giá trị trước đó, ví dụ 1,2,3,0,0,4... thì đổi thành 1,2,3,3,3,4... ạ

    - - - Nội dung đã được cập nhật ngày 08-10-2014 lúc 08:37 AM - - -

    Trích dẫn Gửi bởi conrongchautien
    mileage chỉ dùng 1 lần mà tạo ra mảng 1000 phần tử e là quá tốn tài nguyên. Bạn thử cách này xem sao

    Mã:
    int mileage;for (int i = 0; i < arrValue.size(); i++) {                String statusDescription = StatusCode.getDescription(AccountID,                        arrValue.get(i).GetStatusCode(), privLabel, null);        if( i == 0)                    mileage = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));        else{                    int temp = Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()));            if( temp != 0 ) mileage = temp;        }                               String detail = "Mức nhiên liệu:"                        + Math.round(arrValue.get(i).GetFuelLevel())                        + " l\
     Q.Đường đi được trong ngày:"                        //+ Math.round(objrp.GetOdometer(AccountID, deviceID, (long)arrValue.get(i).getTimeStamp()))//here                        + mileage                        + " km\
    Thời gian: "                        + ConvertFromEpoch(arrValue.get(i).getTimeStamp())                        + "\
    Địa điểm:"                        + GetUTF8FromNCRDecimalString(arrValue.get(i)                                .getAddress()) + "\
    Trạng thái: "                        + GetUTF8FromNCRDecimalString(statusDescription);}
    Cách của bạn rất hay, problem solved [IMG]images/smilies/smile.png[/IMG], many thanks.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •