从文件输入数据时出现问题

时间:2017-03-06 16:59:26

标签: java sorting file-io

我正在尝试从

形式的文件中输入数据
1000
16   11
221   25
234   112
348   102
451   456
183   218
78   338
365   29
114   393
441   369
531   460
...

我遇到了麻烦,因为我一直收到IndexOutOfBounds异常或NoSuchElement异常。如何将数据放入数组中以便以后轻松对其进行排序?

public class shortestRoute 
{   
	
    public static void printGrid(int[][] adjMat)
    {
       for(int i = 0; i < 1000; i++)
       {
          for(int j = 0; j < 2; j++)
          {
        	 System.out.printf("%5d", adjMat[i][j]);
          }
          System.out.println();
       }
    }
	
    public static void main(String[] args) throws IOException 
    {
        File file = new File("rtest1-2.dat");
        Scanner scanner = new Scanner(file);
        
        
	    scanner.useDelimiter("\\s+");
	    
	    int N = scanner.nextInt();
	    int[][] adjMat = new int[N][2];

	    for(int i=0; i < N; i++)
	        for (int j=0; j < 2; j++) 
	             adjMat[i][j] = scanner.nextInt();
        
        printGrid(adjMat);

    }

}

2 个答案:

答案 0 :(得分:2)

你正在迭代。你有1000行和2 Integer,但你正在迭代超过1000x1000 for(int i=0; i < N; i++){ for (int j=0; j < 2; j++) { adjMat[i][j] = scanner.nextInt(); } } 。 只需将内部for循环切换为最大2:

int[][] adjMat = new int[N][2];

您还应该降低数组的分配:

import pandas as pd
import numpy as np
import scipy

np.random.seed(1)
xl = pd.DataFrame({'Concat' : np.arange(101,999), 'ships_x' : np.random.randint(1001,3000,size=898)})
yl = pd.DataFrame({'PickDate' : np.random.randint(1,8,size=10000),'Concat' : np.random.randint(101,999,size=10000), 'ships_x' : np.random.randint(101,300,size=10000), 'ships_y' : np.random.randint(1001,3000,size=10000)})
tempno = [np.random.randint(1,100,size=5)]
k=1
p = pd.DataFrame(0,index=np.arange(len(xl)),columns=['temp','cv']).astype(object)

for ib in [xb for xb in range(0,len(xl))]:
                tempno1 = np.append(tempno,ib)
                temp = list(set(tempno1))
                temptab = yl[yl['Concat'].isin(np.array(xl['Concat'][tempno1]))].groupby('PickDate')['ships_x','ships_y'].sum().reset_index()
                temptab['contri'] = temptab['ships_x']/temptab['ships_y']
                p.ix[k-1,'cv'] = 1 if math.isnan(scipy.stats.variation(temptab['contri'])) else scipy.stats.variation(temptab['contri'])
                p.ix[k-1,'temp'] = temp
                k = k+1

答案 1 :(得分:1)

 int N = scanner.nextInt();

这将获得N为1000。 但是在给定的示例中,您只得到22个整数,NoSuchElement错误就在第22个元素之后。

如果你提供足够的输入,那么你可以摆脱这个错误。干杯!