所以我有一个String数组
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);
}
如何让它打印用户输入的内容?我知道我可以使用字符串变量,但我更喜欢使用数组。
答案 0 :(得分: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 );
}
}
}