0

我需要读取以下格式的数据:
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 语句,它会拒绝读取前两行之后的输入行。问题是,我提交代码的地方会监视输出流,因此会通过输出错误的答案将我的输出评为不正确。

4

3 回答 3

1
  • 好的,首先,永远不要使用StringTokenizer,因为它已被弃用。
  • 其次,数组是零索引的。所以使用for (i = 0, i < size; i++)noti=1i <= size。我猜你的最后一种编程语言是 Visual Basic。
    • 您的数组对于输入数据的大小来说太大了。new int[n][n]与上述零索引一起使用。
  • 一旦您再次遍历 for 循环,您的二维数组就会超出范围。
  • 如果你打算使用readLine,你会好很多String.split(" ")

如果您能更详细地说明输入格式需要是什么以及所需的输出,我可以帮助您更好地阅读它。

于 2013-04-29T01:40:07.197 回答
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 x 5。为什么?我无法理解这背后的原因。

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

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

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

即使可能有多个令牌,循环也将始终只输入一次。

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

由于 k 始终为 1,因此您只需填写 2d 数组中的行/列之一。

结论。print 语句没有任何作用。

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

想想你试图做什么并打印出变量的值来确认你编码时的行为。

我很确定您正在尝试用数字填充二维数组,问题在于 k 的条件,但由于我真的不知道您要做什么,所以我不能 100% 确定。

编辑

命令行

于 2013-04-29T01:33:58.383 回答
0

昵称

给定您的数据集,这就是您读取输入的方式...

2line 3
4line 7
7line 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
于 2013-04-29T01:52:17.793 回答