从输入流中逐行读取数据

时间:2013-04-29 00:48:08

标签: java datainputstream

我需要阅读格式的数据:
    2
    4
    7
    6 4
    2 5 10
    9 8 12 2

数据需要来自默认输入流System.in。我正在使用包装在BufferedReader中的InputStreamReader,所以我能够逐行读取。

InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader in=new BufferedReader(isr);
    String x=in.readLine();
    int numcase=Integer.parseInt(x);
    for(int i=1;i<=numcase;i++){
        System.out.println("");
        x=in.readLine();
        int n=Integer.parseInt(x);
        int[][]t=new int[n+1][n+1];
        for(int j=1;j<=n;j++){
            System.out.println();
            x=in.readLine();
            StringTokenizer st=new StringTokenizer(x);
            for(int k=1;k<=1;k++){
                x=st.nextToken();
                int nume=Integer.parseInt(x);
                t[j][k]=nume;
            }
        }

问题是,如果空白的System.out.println语句不在那里,它会拒绝读取前两行的输入行。事情是,我提交代码监视输出流,因此输出错误的答案将我的输出评级为错误。

3 个答案:

答案 0 :(得分:1)

  • 首先,从不使用StringTokenizer,因为它已被弃用。
  • 其次,数组是零索引的。因此,请使用for (i = 0, i < size; i++)而不是i=1i <= size。我猜你的最后一个编程语言是Visual Basic。
    • 您的数组太大,无法输入数据的大小。将new int[n][n]与上述零索引一起使用。
  • 只要再次遍历for循环,你的二维数组就会超出范围。
  • 如果您要使用readLineString.split(" ")
  • 会让您感觉更好

如果您可以详细说明输入格式需要的内容和所需的输出,我可以帮助您更好地阅读它。

答案 1 :(得分:0)

我不确定您的期望,但写入system.out对您从system.in读取的内容没有影响。

那里有关于你的代码的一些指示:

 String x=in.readLine();
 int numcase=Integer.parseInt(x);
 for(int i=1;i<=numcase;i++){

此循环将输入两次。

x=in.readLine();
int n=Integer.parseInt(x);
int[][]t=new int[n+1][n+1];

n将为4,数组大小为5乘5.为什么?我无法理解这背后的原因。

 for(int j=1;j<=n;j++){

此循环将执行4次。每次读一行。

 StringTokenizer st=new StringTokenizer(x);
        for(int k=1;k<=1;k++){

即使可能有多个令牌,此循环也始终只会输入 ONCE

int nume=Integer.parseInt(x);
            t[j][k]=nume;

因为k总是1,所以你只会填写2d数组中的一行/列。

结论。 印刷语句没有任何魔力。

代码正在做它应该做的事情。

考虑一下您尝试做什么,并打印出变量值,以便在编码时确认行为。

我很确定你是在尝试用数字填充二维数组,问题在于条件超过k但是因为我真的不知道你想要做什么,所以我不能100%肯定。

修改

command line

答案 2 :(得分:0)

尼克姓名

根据您的数据集,以下是您阅读输入的方式......

2 line 3
4 line 7
在此行之后 7 line 12,您尝试对x进行标记(仅包含"7"),但随后您将中断 6 {4}从k循环读取其余的输入(以一种非常奇怪的方式)
2 5 10
9 8 12 2

我很好奇你是否应该在[row][cols]阵列的t[][]中保存令牌!

 1 InputStreamReader isr=new InputStreamReader(System.in);
 2  BufferedReader in=new BufferedReader(isr);
 3  String x=in.readLine();
 4  int numcase=Integer.parseInt(x);
 5  for(int i=1;i<=numcase;i++){
 6      System.out.println("");
 7      x=in.readLine();
 8      int n=Integer.parseInt(x);
 9      int[][]t=new int[n+1][n+1];
10      for(int j=1;j<=n;j++){
11          System.out.println();
12          x=in.readLine();
14          StringTokenizer st=new StringTokenizer(x);
15          for(int k=1;k<=1;k++){
16              x=st.nextToken();
17              int nume=Integer.parseInt(x);
18              t[j][k]=nume;
19          }
20      }
21