Java:Collections.max返回最大数字错误
给定一个循环,我想把最大的数字打印四次。共有Java:Collections.max返回最大数字错误,java,numbers,max,Java,Numbers,Max,给定一个循环,我想把最大的数字打印四次。共有total_A,total_B,total_C,并在这三者中找到最大的数字。但是我在获得正确的最大值方面遇到了一些问题。数据训练1号和4号的输出正确,返回的数字最大,但2号和3号错误。以下是我的输出: 更新的输出 下面是我的代码: public class Multiclass2 { public static void main(String args []){ double x [][] = {{3.24,-0.96},
total_A
,total_B
,total_C
,并在这三者中找到最大的数字。但是我在获得正确的最大值方面遇到了一些问题。数据训练1号和4号的输出正确,返回的数字最大,但2号和3号错误。以下是我的输出:
更新的输出
下面是我的代码:
public class Multiclass2 {
public static void main(String args []){
double x [][] = {{3.24,-0.96},
{-1.56,-0.61},
{-1.1,2.5},
{1.36,-4.8};
double [] wA = {0,1.94,3.82};
double [] wB = {0,-4.9,-4.03};
double [] wC = {0,4.48,3.25};
double threshold = 1;
int n = x.length;
double total_A = 0;
double total_B = 0;
double total_C = 0;
List<Double> li = new ArrayList<Double>();
double max = 0;
for(int i=0;i<n;i++){
System.out.println("For training data point no." + (i+1));
total_A = (threshold * wA[0]) + (x[i][0] * wA[1]) + (x[i][1] * wA[2]);
total_B = (threshold * wB[0]) + (x[i][0] * wB[1]) + (x[i][1] * wB[2]);
total_C = (threshold * wC[0]) + (x[i][0] * wC[1]) + (x[i][1] * wC[2]);
li.add(total_A);
li.add(total_B);
li.add(total_C);
max = Collections.max(li);
System.out.println(total_A+", "+total_B+", "+total_C);
System.out.println("MAx is "+max);
}
}
}
公共类多类2{
公共静态void main(字符串参数[]){
双x[][]={{3.24,-0.96},
{-1.56,-0.61},
{-1.1,2.5},
{1.36,-4.8};
双[]wA={0,1.94,3.82};
双[]wB={0,-4.9,-4.03};
双[]wC={0,4.48,3.25};
双阈值=1;
int n=x.长度;
双倍总_A=0;
双倍总_B=0;
双倍总成本=0;
List li=new ArrayList();
双最大值=0;
对于(int i=0;i您在整个循环中使用相同的集合,因此您正在计算所有数据点的最大值。您犯了两个代码风格错误,导致此错误发生:
- 首先,您没有为变量选择合适的作用域。因为它们是循环的局部变量,所以应该在循环内声明,而不是在循环外声明
- 其次,构造一个集合来计算固定的、少量的数字的最大值是过分的。只需使用
Math.max(a,Math.max(b,c))
更正后的代码为:
public static void main(String args[]) {
double x[][] = {
{ 3.24, -0.96 },
{ -1.56, -0.61 },
{ -1.1, 2.5 },
{ 1.36, -4.8 }
};
double[] wA = { 0, 1.94, 3.82 };
double[] wB = { 0, -4.9, -4.03 };
double[] wC = { 0, 4.48, 3.25 };
double threshold = 1;
int n = x.length;
for (int i = 0; i < n; i++) {
System.out.println("For training data point no." + (i + 1));
double total_A = (threshold * wA[0]) + (x[i][0] * wA[1]) + (x[i][1] * wA[2]);
double total_B = (threshold * wB[0]) + (x[i][0] * wB[1]) + (x[i][1] * wB[2]);
double total_C = (threshold * wC[0]) + (x[i][0] * wC[1]) + (x[i][1] * wC[2]);
double max = Math.max(total_A, Math.max(total_B, total_C));
System.out.println(total_A + ", " + total_B + ", " + total_C);
System.out.println("Max is " + max);
}
}
publicstaticvoidmain(字符串参数[]){
双x[][]={
{ 3.24, -0.96 },
{ -1.56, -0.61 },
{ -1.1, 2.5 },
{ 1.36, -4.8 }
};
双[]wA={0,1.94,3.82};
双[]wB={0,-4.9,-4.03};
双[]wC={0,4.48,3.25};
双阈值=1;
int n=x.长度;
对于(int i=0;i
number
从何而来?好吧,代码不编译,也不会产生您向我们展示的输出,即使它编译成这样…我们需要真正的代码来给出真正的答案请提供一个MCVE;即我们可以为自己编译和运行的代码、样本输入以及样本输入的预期输出。我已经更新了代码。1号和4号的输出是正确的。但不知何故,3号和4号的输出与1号的输出相同,这是错误的。