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

Stack<String>行をバッファリングするために a を使用しないのはなぜですか? 次に、すべての行をポップして出力します。

于 2013-09-27T10:09:00.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 に答える