gpt4 book ai didi

java - 变量未显示在 Cat 日志中

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:28:09 27 4
gpt4 key购买 nike

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

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

编辑

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

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

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

当 i 达到 11 时,它会尝试获取项目编号。 10 来自 happyRating(因为你低于 1)。但是没有,最大值是item nr。 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。到目前为止我可以看到,你想在每个循环中获取每个第一个项目的值并减去第二个项目的值从第一个项目。这与您的代码之间的区别在于,您可以毫无异常(exception)地获取最后一个值。在您的代码中,当循环达到最大值 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(或数组)的大小与项目编号不相似。如果这个大小是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)。

关于java - 变量未显示在 Cat 日志中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com