在Cat日志中没有显示变量



我有一个整数数组列表。单击按钮时,文本字段中的数据被转换并作为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();
                    }
                });
            }
        }

在函数train()中;我从这个数组列表中获取数据,并在计算中使用它。

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。

我已经放入检查,以确保我没有得到一个索引越界异常。我的问题是,J和WEIGHTING都没有显示在我的logcat中。这是否意味着它们没有被计算或者我不知道,但它们被初始化为两个全局变量,所以至少这个值应该打印出来?我需要尽快弄清楚这一点,所以如果有人在那里,可以阐明这一点,我相信这是简单的东西,但我一直在看这个项目这么长时间我的眼睛受伤!!

谢谢!

代替

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

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

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

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

编辑

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

        for (int i = 2; i < 12; i++) {
    if (happyRating.get(i - 1) < happyRating.size()){

当i达到11时,它尝试从happyRating中获取第10项(因为你sub了1)。但是没有,最大值是第9项(因为java从0开始计数)。这里可以达到的最大大小是9,所以如果你需要执行12次for循环,你必须尝试另一种方法

编辑

对不起,我现在无法测试代码,如果有错误,请不要否定,我在家的时候再测试。但这应该也可以…

    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,因为它说->迭代只要i小于happyRating,size()-1(小于表示最大8 -> -1表示7)。

应该可以:

日志。d("J: ", " + J);

日志。d("权重 : ", " + Double.toString(权重));

最新更新