在Java中把输入对象作为一个数组输入到一个列表中。

问题描述 投票:0回答:2

我是一个Java初学者。我想把用户的输入转换成一个二维数组,并转换成一个对象列表。

  • 当我对数据进行硬编码时,可以这样做。

    class Job // Job Class
    {
       public int taskID, deadline, profit;
    
       public Job(int taskID, int deadline, int profit) {
       this.taskID = taskID;
       this.deadline = deadline;
       this.profit = profit;
       }
    }
    
    public class JobSequencing{
    
      public static void main(String[] args) {
      // List of given jobs. Each job has an identifier, a deadline and profit associated with it
    
      List<Job> jobs = Arrays.asList(
            new Job(1, 9, 15), new Job(2, 2, 2),
            new Job(3, 5, 18), new Job(4, 7, 1),
            new Job(5, 4, 25), new Job(6, 2, 20),
            new Job(7, 5, 8), new Job(8, 7, 10),
            new Job(9, 4, 12), new Job(10, 3, 5)
      );
    }
    

但是,我想从用户输入中获取这个对象数组。当我打算这样做时,它给我一个错误。

  • 代码 :

    Scanner scan = new Scanner(System.in);
    int count = scan.nextInt();
    
    int[][] arr = new int[count][3];
    
    for(int i =0; i<count;i++){
       String[] arrNums = scan.nextLine().split(" ");
    
       arr[i][0] = Integer.parseInt(arrNums[0]);
       arr[i][1] = Integer.parseInt(arrNums[1]);
       arr[i][2] = Integer.parseInt(arrNums[2]);
    }
    
    List<Job> jobs = Arrays.asList(
       for(int i=0 ; i< count ; i++){
          new Job(arr[i][0], arr[i][1], arr[i][2]);
       }    
    );
    
  • 错误。

    Syntax error, insert ")" to complete MethodInvocationJava(1610612976)
    Syntax error, insert ";" to complete LocalVariableDeclarationStatementJava(1610612976)
    

你能给我一个从用户输入的2D数组中添加对象作为列表的解决方案吗?

java arraylist multidimensional-array
2个回答
0
投票

你也可以尝试用这种方式 bufferedReader,

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(isr);
List<Job> jobs = new ArrayList <>();
String x = bufferedReader.readLine();
String[] y;
int count = Integer.parseInt(x);

for(int i=0; i<count; i++)
{
   y = bufferedReader.readLine().replaceAll("\\s+$", "").split(" ");
   jobs.add(
        new Job(
                Integer.parseInt(y[0]),
                Integer.parseInt(y[1]),
                Integer.parseInt(y[2])
        )
  );
}

1
投票

首先,创建List,然后在for-loop中添加到List中。

        List<Job> jobs = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            jobs.add(new Job(arr[i][0], arr[i][1], arr[i][2]));
        }

1
投票

而不是

List<Job> jobs = Arrays.asList(
   for(int i=0 ; i< count ; i++){
      new Job(arr[i][0], arr[i][1], arr[i][2]);
   }    
);

试试用lambda

List<Job> jobs = Arrays.stream(arr)
                .map(arrElement -> new Job(arrElement[0],arrElement[1],arrElement[2]))
                .collect(Collectors.toList());

© www.soinside.com 2019 - 2024. All rights reserved.