2013-09-27 115 views
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]); 
} 
} 
+0

請提一下你得到了什麼錯誤 – kTiwari

+0

線程「main」中的異常java.lang.ArrayIndexOutOfBoundsException : \t at getLine.S.main(S.java:14 – Linda

+0

@ShN - 檢查我的答案。您消耗輸入的方式需要稍微改變。 – SudoRahul

回答

0

以下是輸出代碼:

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 
2

你爲什麼不使用Stack<String>緩衝線?然後簡單地彈出每一行並輸出它。

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

您是否得到ArrayIndexOutOfBoundsException?錯誤在於:

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

在該循環的第一步中,您嘗試打印不存在的str [n]。 您的數組由n個元素組成,編號從0到n-1。

正確的代碼是:

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

你需要從n-1開始,因爲數組訪問的最大指數爲array.length-1

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

還需要進行此更改: -

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

s.nextInt()讀取下一個整數沒事,但輸入你打後,被消耗你的數組的第一個元素。爲了避免這種情況,你可以像上面提到的那樣做。

0

你不必做很多工作來處理這個問題,只需更換你的代碼行通過以下代碼 -

int n = s.nextInt()+1;