2013-12-18 169 views
0

你好我有一個讀取掃描儀的整數值的問題。 程序對兩個數組進行排序並將排序後的值保存到新數組中,然後將其寫入控制檯輸出中。 這裏是例外:Java掃描儀excenprion java.util.NoSuchElementException

Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at U42Slevani.main(U42Slevani.java:40) 

這是我的代碼。

package u42slevani; 
import java.util.Scanner; 



/** 
* 
* @author matej.rehak 
*/ 
public class U42Slevani { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     Scanner sc = new Scanner(System.in); 
     int[] pole1; 
     int[] pole2; 
     int pocet=1; 


     while(pocet>0) 
     { 

      int pom; 
      int j; 



     pocet = sc.nextInt(); 
     if(pocet<0 || pocet>1000) 
     { 
      break; 
     } 
     pole1 = new int[pocet]; 
     for(int i = 0;i<pole1.length;i++) 
     { 
      pole1[i] = sc.nextInt(); 
     } 

     pocet = sc.nextInt(); //problem here 

     if(pocet<0 || pocet>1000) 
     { 
      break; 
     } 
     pole2 = new int[pocet]; 
     for(int i = 0;i<pole2.length;i++) 
     { 
      pole2[i] = sc.nextInt(); 
     } 

      for (int i = 1; i<pole1.length; i++) 
      { 
       pom = pole1[i]; 
       j = i - 1; 
       while ((j >= 0) && (pole1[j] > pom)) 
       { 
        pole1[j+1] = pole1[j]; 
        j--; 
       } 
       pole1[j+1] = pom; 
      } 

      for (int i = 1; i<pole2.length; i++) 
      { 
       pom = pole2[i]; 
       j = i - 1; 
       while ((j >= 0) && (pole2[j] > pom)) 
       { 
        pole2[j+1] = pole2[j]; 
        j--; 
       } 
       pole2[j+1] = pom; 
      } 

      int[] pole3 = new int[pole1.length+pole2.length]; 
      merge(pole3, pole1, pole2); 
      StringBuilder vystup = new StringBuilder(""); 
      for (int i = 0; i < pole3.length - 1; i++) 
      { 
       vystup.append(pole3[i] + " "); 
      } 
      vystup.append(pole3[pole3.length -1]); 
      System.out.println(vystup); 


     } 
    } 

    public static void merge(int[] list, int[] left, int[] right) { 
    int i = 0; 
    int j = 0; 
    // dokud nevyjedeme z jednoho z poli 
    while ((i < left.length) && (j < right.length)) { 
    // dosazeni toho mensiho prvku z obou poli a posunuti indexu 
    if (left[i] < right[j]) { 
     list[i + j] = left[i]; 
     i++; 
    } 
    else { 
     list[i + j] = right[j]; 
     j++; 
    } 
    } 
    // doliti zbytku z nevyprazdneneho pole 
    if (i < left.length) { 
    while (i < left.length) { 
     list[i + j] = left[i]; 
     i++; 
    } 
    } 
    else { 
    while (j < right.length) { 
     list[i + j] = right[j]; 
     j++; 
    } 
    } 
} 

} 

我知道問題是在第41行,但我不知道爲什麼。謝謝。

+0

哪一行是41行?我不想數。 – Math

+0

當您運行程序並導致此錯誤時,您輸入了什麼內容? – reindeer

回答

0

您正嘗試通過調用nextInt()從底層的流Scanner中讀取下一個整數,即使您不確定是否有要讀取的內容。如果您嘗試讀取下一個整數,但沒有讀取,則會拋出一個NoSuchElementException

解決這個問題首先檢查是否有一個要讀取的整數,在這種情況下讀取它。

if(sc.hasNextInt()) 
{ 
    pocet = sc.nextInt(); 
}