-1

年間通算日をチェックするアプリを作ろうとしています。特定の数値より大きい配列を宣言するたびに、応答停止メッセージが表示されます。私は何をすべきか?

 public class Main extends Activity {

int[] payDays = new int[11];
int dayOfYear;
Calendar cal;

Intent goToSales, goToChains, goToCheck, goToReference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    cal = Calendar.getInstance();
    dayOfYear = cal.get(Calendar.DAY_OF_YEAR);

    payDays = new int[11];

    payDays[0] = 60;
    payDays[1] = 88;
    payDays[2] = 123;
    payDays[3] = 151;
    payDays[4] = 179;
    payDays[5] = 214;
    payDays[6] = 242;
    payDays[7] = 270;
    payDays[8] = 305;
    payDays[9] = 333;
    payDays[10] = 361;
    payDays[11] = 31;

    // Phew! Checks when to send the notification
    if (dayOfYear == payDays[0] || 
        dayOfYear == payDays[1] ||
        dayOfYear == payDays[2] ||
        dayOfYear == payDays[3] ||
        dayOfYear == payDays[4] ||
        dayOfYear == payDays[5] ||
        dayOfYear == payDays[6] ||
        dayOfYear == payDays[7] ||
        dayOfYear == payDays[8] ||
        dayOfYear == payDays[9] ||
        dayOfYear == payDays[10] ||
        dayOfYear == payDays[11]) 
    {


        Notification noti = new Notification.Builder(this)
        .setContentTitle("MCHelper")
        .setContentText("It's the end of the year!")
        .setSmallIcon(R.drawable.notify2).build();
        noti.flags |= Notification.FLAG_AUTO_CANCEL;


        NotificationManager notiMan = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
          notiMan.notify(0, noti);

          Context context = getApplicationContext();
          CharSequence text = "Hello toast!";
          int duration = Toast.LENGTH_SHORT;

          Toast toast = Toast.makeText(context, text, duration);
          toast.show();   
    }
4

3 に答える 3

4

これを見てください:

int[] payDays = new int[11];

ここで、インデックス 11 にアクセスしようとしています。

payDays[11] = 31;

それはうまくいきません。0 から排他new int[size]的までの要素を持つ配列を作成する (またはもちろん他のタイプの配列) を使用する場合。sizesize

私はあなたが欲しいと思う:

int[] payDays = new int[12];

(さらに、ループを使用して配列に特定の値が含まれているかどうかを確認するか、順序を変更して順序を変更し、 を使用しますArrays.binarySearch。)

于 2013-02-21T08:40:58.873 に答える
1

配列インデックスは 0 から始まります。サイズ 11 の配列を宣言すると、0 から 10 の範囲のインデックス (合計 11 要素) の配列要素が作成されます。したがって、payDays[11] にアクセスすると、ArrayIndexOutOfBounds 例外がスローされます。

解決策は

1) payDays = new int[12]として配列のサイズを増やします。

2) 要素 payDays[11] = 31; を削除します。

于 2013-02-22T08:53:06.567 に答える
1

配列が間違っていると宣言しています。それ以外の場合は、範囲外の要素 11 にアクセスすることになり、エラーが発生しますpayDays = new int[11];payDays = new int[12];

于 2013-02-21T08:40:43.197 に答える