所以我有以下变量,它们是数据类型的混合,包括整数,字符串,双精度和数组。我已经有了填充每个变量所需的方法。我现在需要的是将所有变量收集到一行数据中,然后在另一个类中显示该数据供以后使用。数据应保持相同的数据类型,以便我可以在另一个类中使用它们。同一行数据也需要存储多次。下面是我希望如何存储数据的演示。
Ticket No = 1, Ticket Type = "Lotto", Ticket Value = 2.50, Numbers = {1,2,3,4,5}
Ticket No = 2, Ticket Type = "Jackpot", Ticket Value = 2.50, Numbers = {4,1,4,5,5}
请尽可能为我提供最简单的解决方案。感谢。
int id;
String ticketType;
double value;
int[] numbers= new int[5];
答案 0 :(得分:4)
您可以使用ArrayList<? extends Object>
,然后从Object
投射到每个项目索引的正确类型。但这很难看,而且创建一个Ticket
类会更好,该类具有属于票证的每个值的类字段。像这样:
class Ticket {
int ticketNumber;
TicketType ticketType;
int ticketValueInPence;
List<Integer> ticketDrawNumbers;
enum TicketType {
LOTTO,
JACKPOT
}
}
然后,您可以在新类中定义构造函数和getter方法,以便可以创建具有特定值的票证,然后检索为特定票证设置的值。
获得自定义类型后,您可以将该类型的对象添加到列表中,其代码如下:
List<Ticket> ticketList = new ArrayList<>();
ticketList.add(anyTicket);
比从Object
投射更好。
答案 1 :(得分:2)
类抽象(代表Ticket
)将是最简单的方法。这是将所有关于票证的信息保存在一起的最简洁方法,而不必(真的)担心底层数据结构。
public class Ticket {
private int id;
private String ticketType;
private double value;
private int[] numbers = new int[5];
// various methods like getId, getTicketType, setId, setTicketType
// would follow from here.
}
答案 2 :(得分:1)
import java.util.ArrayList;
import java.util.List;
public class Ticket {
private int id;
private String type;
private double value;
private int[] numbers;
public Ticket(int id, String type, double value, int[] numbers) {
this.id = id;
this.type = type;
this.value = value;
this.numbers = numbers;
}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Ticket no = " + id + ", ");
builder.append("Ticket type = " + type + ", ");
builder.append("Ticket Value = " + value + ", ");
builder.append("Numbers = {");
for (int i = 0; i < 5; i++)
builder.append(i != 4 ? numbers[i] + "," : numbers[i]);
builder.append("}");
return builder.toString();
}
public static void main(String[] args) {
List<Ticket> ticketList = new ArrayList<>();
ticketList.add(new Ticket(1, "Lotto", 2.50, new int[]{1,2,3,4,5}));
ticketList.add(new Ticket(2, "Jackpot", 2.50, new int[]{4,1,4,5,5}));
for (Ticket t: ticketList) {
System.out.println(t);
}
}
}
嗯,我为你做了一切,但是每个人都提到它在面向对象编程中实际上是非常重要的概念。使用类创建新数据类型,就像C中的结构一样。因此,您可以在列表和数组中使用此类型。我希望它有用,你已经学到了一些东西。
我应该提一下toString()方法。当您调用System.out.println()方法时,它会被隐式调用。通过这种方式,您可以获得数据类型的良好字符串表示。
答案 3 :(得分:0)
您应该创建一个名为Ticket的新类。它看起来像这样:
public class Ticket {
int id;
String ticketType;
double value;
int[] numbers;
public Ticket(){}
public Ticket(int id, String ticketType, double value, int[] numbers){
this.id = id;
this.ticketType = ticketType;
this.value = value;
this.numbers = numbers;
}
public int getId() {
return id;
}
public String getTicketType() {
return ticketType;
}
public double getValue() {
return value;
}
public int[] getNumbers() {
return numbers;
}
public void setId(int id) {
this.id = id;
}
public void setTicketType(String ticketType) {
this.ticketType = ticketType;
}
public void setValue(double value) {
this.value = value;
}
public void setNumbers(int[] numbers) {
this.numbers = numbers;
}
}
然后,在您的主类中,以两种方式之一创建ArrayList。使用你的例子。 。
//You can create a ticket like this
Ticket ticketOne = new Ticket();
ticketOne.setId(1);
ticketOne.setTicketType("Lotto");
ticketOne.setValue(2.50);
ticketOne.setNumbers(new int[]{1, 2, 3, 4, 5});
//Alternatively, you can do it all at once
Ticket ticketTwo = new Ticket(2, "Jackpot", 2.50, new int[]{4,1,4,4,5});
ArrayList<Ticket> listOfTickets = new ArrayList<>();
listOfTickets.add(ticketOne);
listOfTickets.add(ticketTwo);
答案 4 :(得分:0)
您可以使用:
String[][][][] ticketInfo;
并通过使用
将整数和双精度值转换回int和双精度型(如果需要)Integer.parseInt(ticketInfo[?][?][?][?]) and Double.parseDouble(ticketInfo[?][?][?][?])