Java 比较两个对象中的值时出错
我想比较betterResult()方法中maxMarks方法计算的值,然后返回并打印较高的maxMarks。执行此操作时出现错误。也可以忽略我创建的其他一些方法(类内结果),因为它们是供以后使用的Java 比较两个对象中的值时出错,java,Java,我想比较betterResult()方法中maxMarks方法计算的值,然后返回并打印较高的maxMarks。执行此操作时出现错误。也可以忽略我创建的其他一些方法(类内结果),因为它们是供以后使用的 public class Result { int[] marks; public int maxMarks(int[] marks) { int max = marks[0]; for (int i = 0; i < marks.length -
public class Result {
int[] marks;
public int maxMarks(int[] marks) {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
public double averageMarks(int[] marks) {
double avg;
double sum = 0;
for (int i = 0; i < marks.length; i++) {
sum = sum + marks[i];
}
avg = sum / marks.length;
System.out.println(avg);
return avg;
}
public int total(int[] marks) {
int total = 0;
for (int i = 0; i < marks.length; i++) {
total = total + marks[i];
}
return total;
}
}
错误:
Error in betterResult "bad operand types for binary operator '>'"
您正在尝试与结果类型的对象进行比较。你不能那样做。res1>res2的含义是什么?应该检查哪些值
您可以在结果类中添加大于的方法,例如:
public boolean greaterThan(Result res2) {
// do somtheing to compare this to res2
}
或者,您可以实现Comparable
界面在没有比较器的情况下比较两个对象:
public Result betterResult(Result res1, Result res2) {
if (res1 > res2)
return res1;
else
return res2;
}
您的方法不知道如何比较两个对象,它们不是整数,也不是比较简单的一些基本类型
您可以将方法更改为以下内容:
public Result betterResult(Result res1, Result res2) {
if (res1.value1 > res2.value1)
return res1;
else
return res2;
}
或者实现可比较的界面,并在比较对象时使用它:
private class ResultsComparator implements Comparator<Result> {
public int compare(Result res1, Result res2) {
if (res1.value1 > res2.value1)
return res1;
else
return res2;
}
}
私有类ResultComparator实现Comparator{
公共整数比较(结果res1,结果res2){
如果(res1.value1>res2.value1)
返回res1;
其他的
返回res2;
}
}
不能使用操作数直接比较两个对象。我变了
您的代码,以便结果类实现Comparable to compare
对象及其maxMark()结果
不需要创建结果类的两个实例,因为没有使用int[]marks
实例变量,所以我创建了一个参数化构造函数来初始化数组
public class Result implements Comparable{
private int[] marks;
public Result(int[] marks){
this.marks = marks;
}
public int maxMarks() {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
public double averageMarks() {
double avg;
double sum = 0;
for (int i = 0; i < marks.length; i++) {
sum = sum + marks[i];
}
avg = sum / marks.length;
System.out.println(avg);
return avg;
}
public int total() {
int total = 0;
for (int i = 0; i < marks.length; i++) {
total = total + marks[i];
}
return total;
}
public int compareTo(Object o){
Result secondResult = (Result)o;
return this.maxMark()-secondResult.maxMark();
}
}
public class TestResult{
public static void main(String args[]) {
TestResult result = new TestResult();
result.display();
}
public void display() {
TestResult result1 = new TestResult();
Result res1 = new Result(new int[] {45, 56, 88, 42, 76 });
int maxMark1 = res1.maxMarks();//you can remove this line
Result res2 = new Result(new int[] { 60, 70, 78, 55, 40 });
int maxMark2 = res2.maxMarks();//you can remove this line
result.betterResult(res1,res2);
}
public Result betterResult(Result res1, Result res2) {
if (res1.compareTo(res2) > 0)
return res1;
else
return res2;
}
}
公共类结果实现可比较{
私人int[]标志;
公开成绩(整数[]分){
这个。标记=标记;
}
公共整数maxMarks(){
int max=标记[0];
对于(int i=0;i最大值){
max=分数[i];
}
}
系统输出打印项次(最大值);
返回最大值;
}
公开双平均马克(){
双平均值;
双和=0;
for(int i=0;i0)
返回res1;
其他的
返回res2;
}
}
看起来你有两个问题
您不明白静态类与实例类的工作方式有什么不同
您正在尝试比较2个非基本体对象
现在,您的结果类提供了应该/可以作为静态的方法,但同时,您正在实例化结果对象
现在,如果您想比较两个结果实例,您应该更改您的类,以便实际使用/保留marks[]变量
public Result(int[] marks){
this.marks = marks
}
//Notice, I've removed the int[] marks property, we'll use the local variable instead
public int maxMarks() {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
public class Result implements Comparable{
private int[] marks;
public Result(int[] marks){
this.marks = marks;
}
public int maxMarks() {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
public double averageMarks() {
double avg;
double sum = 0;
for (int i = 0; i < marks.length; i++) {
sum = sum + marks[i];
}
avg = sum / marks.length;
System.out.println(avg);
return avg;
}
public int total() {
int total = 0;
for (int i = 0; i < marks.length; i++) {
total = total + marks[i];
}
return total;
}
public int compareTo(Object o){
Result secondResult = (Result)o;
return this.maxMark()-secondResult.maxMark();
}
}
public class TestResult{
public static void main(String args[]) {
TestResult result = new TestResult();
result.display();
}
public void display() {
TestResult result1 = new TestResult();
Result res1 = new Result(new int[] {45, 56, 88, 42, 76 });
int maxMark1 = res1.maxMarks();//you can remove this line
Result res2 = new Result(new int[] { 60, 70, 78, 55, 40 });
int maxMark2 = res2.maxMarks();//you can remove this line
result.betterResult(res1,res2);
}
public Result betterResult(Result res1, Result res2) {
if (res1.compareTo(res2) > 0)
return res1;
else
return res2;
}
}
public Result(int[] marks){
this.marks = marks
}
//Notice, I've removed the int[] marks property, we'll use the local variable instead
public int maxMarks() {
int max = marks[0];
for (int i = 0; i < marks.length - 1; i++) {
if (marks[i] > max) {
max = marks[i];
}
}
System.out.println(max);
return max;
}
public void display() {
Result result1 = null;// this will point to the greatest Result, that betterResult will return
Result res1 = new Result(new int[] {45, 56, 88, 42, 76 });
Result res2 = new Result(new int[] { 60, 70, 78, 55, 40 });
result1 = betterResult(res1, res2);
}
public Result betterResult(Result res1, Result res2) {
res1.maxMarks() > res2.maxMarks() ? return res1 : return res2;
}