变量不显示在Cat Log中

时间:2013-04-22 10:57:40

标签: java android algorithm variables global-variables

我有一个整数的arraylist。当有一个按钮单击时,文本字段中的数据将被转换并作为int添加到数组列表中。以下是我的代码

public void onClick(View v) {
            // TODO Auto-generated method stub

            String rate = happy.getText().toString();
            int rating = Integer.valueOf(rate);
            counter += 1;

            if (counter == 10) {
                train();
            }

            if (rating > 0 && rating < 11) {
                happyRating.add(rating);

                test = happyRating.get(0);
                Log.d("Value: ", Integer.toString(test));

            } else {

                InputAlertHandler.post(new Runnable() {
                    public void run() {
                        int duration = Toast.LENGTH_LONG;
                        CharSequence text = "Please enter Happiness Indicator between 1 and 10";
                        Context context = getApplicationContext();
                        inputAlert = Toast
                                .makeText(context, text, duration);
                        inputAlert.show();
                    }
                });
            }
        }

在功能列车()中;我从这个数组列表中获取数据并在计算中使用它。

public void train() {

    for (int i = 2; i < 12; i++) {

        if (happyRating.get(i - 1) < happyRating.size()){

            int x, x1, x2, y, y1, y2;
            double learningRate = -0.00002;

            x1 = happyRating.get(i - 1);
            x2 = happyRating.get(i - 2);
            y1 = iteration[i - 1];
            y2 = iteration[i - 2];

            x = x2 - x1;
            y = y2 - y1;

            if (x == 0) {
                slope = 0;
            } else {
                slope = (y2 - y1) / (x2 - x1);
            }
            j++;

            Log.d("J: ", Integer.toString(j));

            double weightAdj = happyRating.get(j) * slope * learningRate;

            weighting = (weighting + weightAdj);

            Log.d("WEIGHTING: ", Double.toString(weighting));// break;

        }
        else
        {
            break;
        }

    }

当我在计算中使用斜率时,我得到前两点的斜率,这就是为什么我在for循环中设置int i = 2。

我已经进行检查以确保我没有获得Index out of bounds异常。我的问题是,J和WEIGHTING都没有出现在我的logcat中。现在,这是否意味着它们没有计算或我不知道,但它们被初始化为两个全局变量,所以至少应该打印出这个值?我需要尽快弄清楚这一点,所以如果有人可以对此有所了解,我确信这很简单,但我一直在看这个项目这么长时间我的眼睛受伤!

谢谢!

2 个答案:

答案 0 :(得分:0)

而不是

      Log.d("WEIGHTING: ", Double.toString(weighting));// break;

在logcat控制台中声明一个关键字,例如“output”和write:

     Log.d("output","WEIGHTING: "+Double.toString(weighting));// break;

Log的第一个参数。必须是您的logcat输出的关键字。

修改

Logcat似乎不是问题所在。所以,问题出在for循环中。如果你的happyRating肯定是10,则会发生以下情况:

        for (int i = 2; i < 12; i++) {

    if (happyRating.get(i - 1) < happyRating.size()){

当我达到11时,它会尝试获得项目nr。 10来自happyRating(因为你分1)。但是没有,最大值是项目nr。 9(因为java从0开始计数)。你可以达到的最大尺寸是9,所以如果你需要执行for循环12次,你必须尝试另一种方式

修改

很抱歉,我现在无法测试代码,如果有错误,请不要投票,我会在家时测试它。但这也应该有效......

    public void train() {

for (int i = 0; i < happyRating.size()-1; i++) {

    if (happyRating.get(i) < happyRating.size()){

        int x, x1, x2, y, y1, y2;
        double learningRate = -0.00002;

        x1 = happyRating.get(i+1);
        x2 = happyRating.get(i);
        y1 = iteration[i+1];
        y2 = iteration[i];

        x = x2 - x1;
        y = y2 - y1;

        if (x == 0) {
            slope = 0;
        } else {
            slope = (y2 - y1) / (x2 - x1);
        }
        j++;

        Log.d("J: ", Integer.toString(j));

        double weightAdj = happyRating.get(j) * slope * learningRate;

        weighting = (weighting + weightAdj);

        Log.d("WEIGHTING: ", Double.toString(weighting));// break;

    }
    else
    {
        break;
    }

}

在你的代码的这个修改中,for循环只迭代直到happyRating达到最大大小-2。到目前为止,我可以看到,你想要在每个循环中获取每个第一项的值并减去第二项的值第一项。此代码与您的代码之间的区别在于,您可以无异常地获取最后一个值。在您的代码中,当循环达到最大值-1时,您尝试获取一个不存在的happyRating项。例如,假设整数“i”的值为10.这就是您的代码所做的:

        x1 = happyRating.get(i - 1);//x1 = happyRating.get(9)
        x2 = happyRating.get(i - 2);//x2 = happyRating.get(8)
        y1 = iteration[i - 1];//y1 = iteration[9]
        y2 = iteration[i - 2];//y2 = iteration[8]

如果你的happyRating大小最大为9,则x1想要一个不存在的值。 ArrayList(或Array)的大小与项目编号不相似。如果此大小为9,则最后一项的数量为8,因为Java / Android从0开始计数。因此,您无法获得项目编号9。 for循环说,迭代只要“i”小于happyRating.size()。如果happyRating.size()为9,则“i”迭代到8,然后结束迭代。如果happyRating.size()是9:

,这就是我的代码的修改
         x1 = happyRating.get(i+1);//x1=happyRating.get(8)
         x2 = happyRating.get(i);//x2=happyRating.get(7)
         y1 = iteration[i+1];//y1=iteration[8]
         y2 = iteration[i];//y2=iteration[7]

循环只迭代到7,因为它说 - &gt;迭代只要i小于happyRating,size() - 1(小于意味着最大8 - > -1意味着7)。

答案 1 :(得分:-1)

这应该有效:

Log.d(“J:”,“”+ j);

Log.d(“加权:”,“”+ Double.toString(加权));