0

我想用java编写一个程序,将所有行输入到标准输入并以相反的顺序将它们写入标准输出。这是可能的代码,但它有一个错误,我不明白问题出在哪里(在这个程序中,我首先询问行数,然后将其保存在“n”中。)有什么帮助吗?提前致谢

 package getLine;
 import java.util.Scanner;
 public class S {
   public static void main(String[] args)
{
    Scanner s= new Scanner(System.in);
    System.out.println("how many lines do you want to enter");
    int n= s.nextInt();
    String [] str;
    str= new String[n];
    for(int i=0;i<n;i++)
        str[i]=s.nextLine();
    for(int i=n;i>=0;i--)
        System.out.println(str[i]);
}
}
4

6 回答 6

2

为什么不使用 aStack<String>来缓冲行?然后简单地弹出每一行并输出它。

于 2013-09-27T10:09:00.050 回答
1

以下是带输出的代码:

import java.util.Scanner;

public class S {

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.println("how many lines do you want to enter");
    int n = s.nextInt();

    System.out.println("I want to enter " + n + " lines ");
    n = n + 1;
    String[] str;
    str = new String[n];
    int count = 0;
    for (int i = 0; i < n; i++) {
        str[i] = s.nextLine();
        System.out.println(str[i]);
        count++;
    }
    if (count == n) {
        System.out.println("Reversed output");

        for (int i = n - 1; i >= 0; i--) {
            System.out.println(str[i]);
        }
    }
}

输出:

how many lines do you want to enter
2
I want to enter 2 lines 

1
1
2
2
Reversed output
2
1
于 2013-09-27T10:53:24.050 回答
0
for(int i=n-1;i>=0;i--)
    System.out.println(str[i]);
于 2013-09-27T10:09:05.783 回答
0

你得到 ArrayIndexOutOfBoundsException 吗?错误就在这里:

  for(int i=n;i>=0;i--)
    System.out.println(str[i]);

在该循环的第一步中,您尝试打印不存在的 str[n]。您的数组由从 0 到 n-1 编号的 n 个元素组成。

正确的代码是:

  for(int i = n - 1; i >= 0; i--)
      System.out.println(str[i]);
于 2013-09-27T10:09:06.420 回答
0

您需要从 开始,n-1因为数组中可访问的最大索引是array.length-1.

for(int i=n-1;i>=0;i--){

您还需要进行此更改:-

int n= Integer.parseInt(s.nextLine());

s.nextInt()可以读取下一个整数,但是之后您输入的输入将作为数组的第一个元素使用。为避免这种情况,您可以按照我上面提到的方法进行操作。

于 2013-09-27T10:09:15.120 回答
0

您不必做太多事情来处理这个问题,只需将代码中的行替换为以下代码 -

int n = s.nextInt()+1;
于 2013-09-27T10:19:18.567 回答