2014-04-27 44 views
0

我使用此代码,出于某种原因,我得到一个没有这样的元素异常......没有这样的元素异常带环

numCompanies正在从键盘输入,并呈现出了右和投资组合是一个包含[numCompanies] [4]的数组。

任何人都可以找出原因吗?

for(int i = 0; i < numCompanies; i++) 
{ 
    System.out.print("Stock #" + (i+1) + ": "); 
    String stockData = kbReader.nextLine(); 
    System.out.print("\n\n hi" + stockData); 
    Scanner stockLine = new Scanner(stockData); 
    for(int j = 0; j < 4; j++) 
    { 
     portfolio[i][j] = stockLine.next(); 
    } 
} 
+2

看起来像'stockData'并不总是必须由空格分隔4子。 –

+0

是的,由于某种原因,nextLine总是跳过库存#1,并且我创建了另一个扫描器对象,并且修复了问题 – Tdag

回答

1

我没有测试过这个,但可能stockLine.next();被调用,即使没有元件剩下。所以也许这可以帮助:

for(int j = 0; j < 4; j++) 
{ 
    if(stockLine.hasNext()) { 
     portfolio[i][j] = stockLine.next(); 
    } 
    else 
    { 
     portfolio[i][j] = 0; // or whatever you want it to be by default 
    } 
} 

这将解决错误信息,但不是错误。

+3

您应该使用'hasNext()',而不是捕捉到怀疑 – Rogue

+0

您是对的。我修好了它。 – jschlichtholz

0

您将单个字符串传递给Scanner对象,但我会说有更好的方法来做到这一点。

如果你想简单地在输入的字符串中的每个值,用空格分隔读取,然后使用split()

String stockData = kbReader.nextLine(); 
String[] data = stockData.split(" "); 
if (data.length != 4) { 
    System.err.println("Bad data value found!"); 
} else { 
    //run your loop 
} 
相关问题