【问题标题】:Java - Trying to print an index in a String Array Using get methodJava - 尝试使用 get 方法打印字符串数组中的索引
【发布时间】:2014-03-17 07:09:01
【问题描述】:

所以我有一个字符串数组

private  String[] transmission = {"Drive", "Park", "Reverse"};

这是我的set方法,我在练习我的switch语句,因为我不经常使用它。

public void setTransmission(String[] transmission) {
    System.out.println("To change the transmission, enter D for Drive,P for Park or R for reverse");
    switch (input.nextLine()) {
        case "D":
        case "d":
            System.out.println("The Car is currently in Drive.");
            transmission[0] = this.transmission[0];
            break;
        case "P":
        case "p":
            System.out.println("The Car is currently in Park.");
            transmission[1] = this.transmission[1];
            break;
        case "R":
        case "r":
            System.out.println("The Car is currently in Reverse");
            transmission[2] = this.transmission[2];
            break;

    } 

这是真正的问题。在我的 getMethod 中,它只打印数组中的第一个索引:

 public String getTransmission()
    {
        return String.format("The car is currently in %s",transmission);
    }

如何让它打印用户输入的内容?我知道我可以只使用字符串变量,但我更喜欢使用数组。

【问题讨论】:

  • 您应该在setTransmission 方法中交换作业。即this.transmission[0] = transmission[0];等等。
  • 您可以跟踪插入新过渡的索引并在 getter 处返回 transmission[index]
  • @user3044002 您可能正在寻找:String.format("The car is currently in %s",Arrays.toString(transmission)))
  • @DavidWallace 然后我看不出这个getTransmission 方法的意义何在。是否应该返回 all 数组的内容?
  • 你需要在你的类中有某种字段来存储当前的“齿轮”,以便它可以被返回。您可以将其存储为 String 值本身,也可以作为 int 指示数组的索引。在setTransmission 方法中分配此字段。

标签: java arrays string indexing getmethod


【解决方案1】:

假设这发生在同一个类中,您需要将索引作为内部状态。

一个可能的实现是:

public class Car
{
    private final String[] transmission = { "Drive", "Park", "Reverse" };

    private final Scanner  input;

    private int            index;

    public Car( Scanner input )
    {
        this.input = input;
    }

    public void setTransmission()
    {
        System.out.println( "To change the transmission, enter D for Drive,P for Park or R for reverse" );
        switch ( input.nextLine() )
        {
        case "D":
        case "d":
            System.out.println( "The Car is currently in Drive." );
            index = 0;
            break;
        case "P":
        case "p":
            System.out.println( "The Car is currently in Park." );
            index = 1;
            break;
        case "R":
        case "r":
            System.out.println( "The Car is currently in Reverse" );
            index = 2;
            break;
        }
    }

    public String getTransmission()
    {
        return String.format( "The car is currently in %s", transmission[index] );
    }
}

如果您可以为您的问题添加更多上下文,这将有所帮助。尤其是您如何调用您的方法以及它们所在的位置。

更好的设计可能是为传输创建一个枚举并将解析与数据分开。

这会将汽车简化为没有任何逻辑的数据容器:

public class Car
{
    public enum Transmission
    {
        Drive, Park, Reverse
    }

    private Transmission transmission;

    public void setTransmission( Transmission transmission )
    {
        this.transmission = transmission;
    }

    public String getTransmission()
    {
        return String.format( "The car is currently in %s", transmission );
    }
}

使用这个 Car 类的应用程序会解析传输并在汽车中设置类型化的传输:

public class CarApplication
{
    public static void main( String[] args )
    {
        try ( Scanner input = new Scanner( System.in ) )
        {
            System.out.println( "To change the transmission, enter D for Drive,P for Park or R for reverse" );
            String answer = input.nextLine();
            Transmission transmission = parseTransmission( answer );

            Car car = new Car();

            car.setTransmission( transmission );

            System.out.println( car.getTransmission() );
        }
    }

    private static Transmission parseTransmission( String input )
    {
        switch ( input )
        {
        case "D":
        case "d":
            return Transmission.Drive;
        case "P":
        case "p":
            return Transmission.Park;
        case "R":
        case "r":
            return Transmission.Reverse;
        default:
            throw new IllegalArgumentException( "expected an input D,P,R but got: " + input );
        }
    }
}

【讨论】:

  • 另外请注意,switch for Strings 仅在 Java 7 中引入。如果您使用的是 Java 6 及以下版本,则必须使用 if 语句
猜你喜欢
  • 2017-06-04
  • 1970-01-01
  • 2016-01-31
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多