读取多行,ArrayList

时间:2013-11-27 15:43:02

标签: java

我想解决的问题是:

Sereja有一个数组a,由n个整数a1,a2,...组成。男孩不能坐着什么都不做,他决定研究一个阵列。 Sereja拿了一张纸写出了m个整数l1,l2,...,lm(1≤li≤n)。对于每个数字li,他想知道有多少不同的数字留在位置li,li + 1,...,n。形式上,他想找到ali,ali + 1,...,an。?

中不同数字的数量

Sereja写出了必要的数组元素,但阵列太大了,男孩时间紧迫。帮助他,为每个li找到所描述问题的答案。

我需要能够读取这样的输入:

10 10
1 2 3 4 1 2 3 4 100000 99999
1
2
3
4
5
6
7
8
9
10

我尝试使用缓冲读卡器,但我总是遇到运行时错误

import java.util.ArrayList;
import java.util.Scanner;
import java.io.*;
public class Main
{
    public static void main(String[] args)
   {
      Scanner scan = new Scanner(new BufferedInputStream(System.in));
      int n = scan.nextInt();
      int m = Integer.parseInt(scan.nextLine());
      int[] a = new int[n];
      int[] l = new int[m];
      for(int i=0; i<n-1; i++)
      {
         a[i] = scan.nextInt();
      }
      a[n] = Integer.parseInt(scan.nextLine());
      for(int j=0; j<m; j++)
      {
         l[j] = Integer.parseInt(scan.nextLine());
      }
      int counter = 0;
      ArrayList<Integer> list = new ArrayList<Integer>();
      for(int k=0; k<m; k++)
      {
         for(int x=l[k]; x<= n; x++)
         {
            if(!(list.contains(x)))
            {
                list.add(x);
                counter++;
            }
         }
         System.out.println(counter);
      }
   }
}

每当我运行此程序时,都会出现运行时错误。我需要通过上述输入获得的输出是     6     6     6     6     6     五     4     3     2     1

为什么不起作用?


好的,我试过了:

import java.io.*;
import java.util.ArrayList;
public class Main
{
   public static void main(String[] args) throws IOException
   {
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
     String[] tokens = br.readLine().split(" ");
     int n = Integer.parseInt(tokens[0]);
     int m = Integer.parseInt(tokens[1]);
     String[] tokenstwo = br.readLine().split(" ");
     int[] a = new int[n];
     int[] l = new int[m];
      for(int i=0; i<n; i++)
      {
         a[i] = Integer.parseInt(tokenstwo[i]);
      }
      for(int j=0; j<m; j++)
      {
         l[j] = Integer.parseInt(br.readLine());
      }
      int counter = 0;
      ArrayList<Integer> list = new ArrayList<Integer>();
      for(int k=0; k<m; k++)
      {
         for(int x=l[k]; x<= n; x++)
         {
            if(!(list.contains(x)))
            {
                list.add(x);
                counter++;
            }
         }
         System.out.println(counter);
      }
   }
}

它说了一些IOException。因此,我在顶部添加了抛出ioexception。它仍然会给出运行时错误。

1 个答案:

答案 0 :(得分:0)

尝试使用以下代码进行输入。适合您的需要。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] tokens = br.readLine().split(" ");
int n1 = Long.parseLong(tokens[0]);