【问题标题】:using arrays & methods with Object Oriented Programing Java在面向对象编程 Java 中使用数组和方法
【发布时间】:2013-04-09 16:30:43
【问题描述】:

我正在学习Java,话虽如此,我的知识仍处于学习Java的爬行阶段。我已经阅读了有关在非常强大的数组中使用对象的信息。我正在尝试编辑这个简单的示例类和测试类,以显示谁是最快的驱动程序,以及最快的速度是多少。我在考虑如何解决这个问题有两种方法。一个是找到最大速度,并找到什么数组编号(例如数组 [2])。

我已经设法在循环中捕获了最高速度和数组编号。把它放到一个方法中,然后调用它让我很困惑。任何帮助深表感谢。

我得到的错误代码
TestBikeWithArray.java:73:错误:二元运算符'>'的操作数类型错误
if (bikeRace[i] > bikeRace[0])
^
第一种:自行车
第二种:自行车
1 个错误

工具已完成,退出代码为 1
他们都是自行车课,我不明白。

public class Bike{

private String driver;
private int gear;
private int cadence;
private int speed;
private int id;

private static int numberOfBikes = 0;

public Bike(String theDriver, int startGear,int startCadence, int startSpeed){
    driver = theDriver;
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
    numberOfBikes++;
    id = numberOfBikes;
}

public String getDriver() {return driver;}
public void setDriver(String d) {driver = d;}


public int getGear(){return gear;}
public void setGear(int g){gear = g;}

public int getCadence(){return cadence;}
public void setCadence(int c){cadence = c;}


public int getSpeed(){return speed;}
public void setSpeed(int s) {speed = s;}

public int getID() {return id;}

public static int getNumberOfBikes() {return numberOfBikes;}

// method to print out contents of object
public String toString ()
{
    StringBuffer sb = new StringBuffer();
    sb.append("\nDriver: " + driver);
    sb.append("\nGear: " + gear);
    sb.append("\nCadence: " + cadence);
    sb.append("\nSpeed: " + speed);
    sb.append("\nID: " + id + "\n");

    return (new String(sb));
} // end toString method

} // end class


主要测试自行车

import java.util.Scanner;
import javax.swing.JOptionPane;

class TestBike
{
public static void main(String[] args)
{
    String message ="";

    Bike[] bikeRace = new Bike[10];

    bikeRace[0] = new Bike("Cersei Lannister", 0, 0, 0);
    bikeRace[1] = new Bike("Daenerys Targaryen", 10, 60, 22);
    bikeRace[2] = new Bike("Robb Stark", 21, 50, 15);

    //testing values
    //bikeRace[3] = new Bike("Melisandre", 31,90,155);
    //bikeRace[4] = new Bike("Margaery Tyrell", 2, 3, 100);

    bikeRace[0].setGear(3);

    for(int i=0; i < Bike.getNumberOfBikes(); i++)
    {
        System.out.println(bikeRace[i].toString());

        //testing, must use a proper function call!
        //System.out.println(bikeRace[i].getDriver());
    } // end for loop

    //find max speed & driver findTheFastestDriver

    //testing stuffs get all drivers
    /*for(int i=0; i < Bike.getNumberOfBikes(); i++)
    {
        System.out.println("Driver: " + bikeRace[i].getDriver());
    }

    //testing get all speeds
    for(int i=0; i <Bike.getNumberOfBikes(); i++)
    {
        System.out.println("Speed: " + bikeRace[i].getSpeed());
    } */

    //****************************************************************/
    //finding fastest bike without a method
    //fastest speed is 22
    /*int fastestBike = bikeRace[0].getSpeed();
    int fastestBikeIndex = 0;
    for(int i=0; i<Bike.getNumberOfBikes(); i++)
    {
        if (bikeRace[i].getSpeed() >= fastestBike)
        {
            fastestBike = bikeRace[i].getSpeed();
            fastestBikeIndex = i;
        }//end if
    }//end for
    System.out.println("fastest Bike Speed: " + fastestBike + " " + " Bike index of " + fastestBikeIndex);*/
    //********************************************************************


    int fastestBikeIndex = findTheFastestDriver(bikeRace);
    System.out.println("\nThe fastest driver is " + bikeRace[fastestBikeIndex].getDriver() + " and the speed of " + bikeRace[fastestBikeIndex].getSpeed() + " mph.");


    System.out.println("\nNumber of Bikes: " + Bike.getNumberOfBikes() + "\n");

} //end of main

public static int findTheFastestDriver(Bike[] bikeRace)
{
    int fastestBike = bikeRace[0].getSpeed();
    int fastestBikeIndex = 0;
    for(int i=0; i < Bike.getNumberOfBikes(); i++)
    {
        if (bikeRace[i].getSpeed() >= fastestBike)
        {
            fastestBike = bikeRace[i].getSpeed();
            fastestBikeIndex = i;
        }//end if
    }//end for
    return fastestBikeIndex;
}

} //end of class

代码有效 :) 太高兴了。

【问题讨论】:

    标签: java arrays oop methods


    【解决方案1】:

    if (bikeRace[i] &gt; bikeRace[0])

    改成

    if (bikeRace[i].getSpeed() &gt; bikeRace[0].getSpeed())

    推理:你不能用数字比较非数字对象。

    【讨论】:

    • 在 Java 中,您应该实现 Comparable 并使用 compareTo 方法建立自然排序以进行排序/比较。
    • @Tim Bender 的想法是好的,如果(且仅当)您的对象具有自然排序
    • @TimBender - 这当然是一种方法,但“应该”是错误的词。 Bike 对象是否具有自然顺序还不清楚。即使他们这样做了,也不清楚它是否应该基于速度。为什么不在iddriver 的词汇顺序上?
    • TimBender,对 compareTo 方法赞不绝口。我不知道这个工具,阅读更多关于这个主题的内容。很酷,也很强大。使这更简单一点。明天会玩这个。
    • @George Putnam 您应该研究的另一个工具是Comparator。如果一个类没有单一的自然排序,你可以为它定义一个Comparator 并将它传递给期望的操作,例如排序和创建一个 PriorityQueue
    猜你喜欢
    • 2021-06-14
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多