具有两个ArrayList的NoSuchElementException 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.util.*; 公共类CSVReader { 公共静态void main(字符串[]args)引发FileNotFoundException { Scanner Scanner=new Scanner(新文件(“sunch.csv”); ArrayList AccountNum=新的ArrayList(); ArrayList AccountBal=新的ArrayList(); scanner.useDelimiter(“,”); while(scanner.hasNext()) { AccountNum.add(scanner.next()); AccountBal.add(scanner.next()); } scanner.close(); 显示(AccountNum、AccountBal); } 公共静态无效显示(ArrayList AccountNum、ArrayList AccountBal) { System.out.println(“\n列表大小为”+AccountNum.size()); 对于(int x=0;x

具有两个ArrayList的NoSuchElementException 导入java.io.File; 导入java.io.FileNotFoundException; 导入java.util.*; 公共类CSVReader { 公共静态void main(字符串[]args)引发FileNotFoundException { Scanner Scanner=new Scanner(新文件(“sunch.csv”); ArrayList AccountNum=新的ArrayList(); ArrayList AccountBal=新的ArrayList(); scanner.useDelimiter(“,”); while(scanner.hasNext()) { AccountNum.add(scanner.next()); AccountBal.add(scanner.next()); } scanner.close(); 显示(AccountNum、AccountBal); } 公共静态无效显示(ArrayList AccountNum、ArrayList AccountBal) { System.out.println(“\n列表大小为”+AccountNum.size()); 对于(int x=0;x,java,csv,arraylist,java.util.scanner,nosuchelementexception,Java,Csv,Arraylist,Java.util.scanner,Nosuchelementexception,这个程序应该从CSV文件中读取两个数组。它编译得很好,但是当我运行它时,它抛出了NoSuchElementException。当只使用一个数组时,程序工作。有人知道它抛出此异常的原因和解决方法吗?编辑:要更正我对ChrisCM评论的回答,这将防止在仍然交替扫描输入的情况下收到异常 import java.io.File; import java.io.FileNotFoundException; import java.util.*; public class CSVReader { publ

这个程序应该从CSV文件中读取两个数组。它编译得很好,但是当我运行它时,它抛出了NoSuchElementException。当只使用一个数组时,程序工作。有人知道它抛出此异常的原因和解决方法吗?

编辑:要更正我对ChrisCM评论的回答,这将防止在仍然交替扫描输入的情况下收到异常

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class CSVReader
{
public static void main(String[] args) throws FileNotFoundException
{
    Scanner scanner = new Scanner(new File("Lunch.csv"));
    ArrayList<String> AccountNum = new ArrayList<String>();
    ArrayList<String> AccountBal = new ArrayList<String>();
    scanner.useDelimiter(",");
    while(scanner.hasNext())
    {
       AccountNum.add(scanner.next());
       AccountBal.add(scanner.next());
    }
    scanner.close();
    display(AccountNum, AccountBal);
 }

 public static void display(ArrayList AccountNum, ArrayList AccountBal)
 {
     System.out.println("\nThe size of the list is " + AccountNum.size());
     for(int x = 0; x < AccountNum.size(); ++x)
     {
        System.out.println("position " + x + " Number: " + AccountNum.get(x));
        System.out.println("position " + x + " Number: " + AccountBal.get(x));
     }
 }


}
您可能会发现最终会出现不均匀列表(AccountNum的最后一个元素是空格),您可以使用

while(scanner.hasNext())
{
   AccountNum.add(scanner.next());
   if(scanner.hasNext())
       AccountBal.add(scanner.next());
}
如果仍然有不均匀列表,则需要调试程序以解决问题

解析输入的另一种方法:

if(AccountNum.get(AccountNum.size() - 1).trim().equals("")) {
    AccountNum.remove(AccountNum.size() - 1);
}

您还可以切换到使用类似的库,该库可以处理输入文件中的空格错误。

编辑:要更正我对ChrisCM注释的回答,这将防止在仍然交替扫描输入时收到异常

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class CSVReader
{
public static void main(String[] args) throws FileNotFoundException
{
    Scanner scanner = new Scanner(new File("Lunch.csv"));
    ArrayList<String> AccountNum = new ArrayList<String>();
    ArrayList<String> AccountBal = new ArrayList<String>();
    scanner.useDelimiter(",");
    while(scanner.hasNext())
    {
       AccountNum.add(scanner.next());
       AccountBal.add(scanner.next());
    }
    scanner.close();
    display(AccountNum, AccountBal);
 }

 public static void display(ArrayList AccountNum, ArrayList AccountBal)
 {
     System.out.println("\nThe size of the list is " + AccountNum.size());
     for(int x = 0; x < AccountNum.size(); ++x)
     {
        System.out.println("position " + x + " Number: " + AccountNum.get(x));
        System.out.println("position " + x + " Number: " + AccountBal.get(x));
     }
 }


}
您可能会发现最终会出现不均匀列表(AccountNum的最后一个元素是空格),您可以使用

while(scanner.hasNext())
{
   AccountNum.add(scanner.next());
   if(scanner.hasNext())
       AccountBal.add(scanner.next());
}
如果仍然有不均匀列表,则需要调试程序以解决问题

解析输入的另一种方法:

if(AccountNum.get(AccountNum.size() - 1).trim().equals("")) {
    AccountNum.remove(AccountNum.size() - 1);
}

您还可以切换到使用类似的库,它可以处理输入文件中的空白错误。

输入文件中可能有奇数个项目。您的代码假设每个帐号都有一个,并且只有一个余额。如果您的文件确实满足此要求,则可能是您使用了:

while(scanner.hasNext())
{
   String temp = scanner.next();
   if(temp.trim().equals("") && scanner.hasNext()) {
       throw new Exception("This shouldn't happen");
   } else { 
       AccountNum.add(temp);
   }
   if(scanner.hasNext())
       AccountBal.add(scanner.next());
}
你可能想成为这样的人

scanner.useDelimeter(",");

输入文件中可能有奇数个项目。您的代码假设每个帐号都有一个,并且只有一个余额。如果您的文件确实满足此要求,则可能是您使用了:

while(scanner.hasNext())
{
   String temp = scanner.next();
   if(temp.trim().equals("") && scanner.hasNext()) {
       throw new Exception("This shouldn't happen");
   } else { 
       AccountNum.add(temp);
   }
   if(scanner.hasNext())
       AccountBal.add(scanner.next());
}
你可能想成为这样的人

scanner.useDelimeter(",");

其中一个账号没有余额或为空,或者有一个额外的逗号,其中…

其中一个账号没有余额或为空,或者有一个额外的逗号,其中…

您正在使用
扫描仪。在
扫描仪之后的下一个
2次。hasNext()
哪一行引发异常,你知道吗?此外,while循环似乎假定要添加偶数个元素。是这样吗?可能csv和最后一个
AccountBal.add(scanner.next())中有奇数个元素
是问题所在…您正在使用
扫描仪。在
扫描仪之后,下一个
2次。hasNext()
哪一行引发异常,您知道吗?此外,while循环似乎假定要添加偶数个元素。是这样吗?可能csv和最后一个
AccountBal.add(scanner.next())中有奇数个元素是问题所在…虽然这不会引发异常,但我怀疑它是否按他希望的方式运行。显然AccountNum和AccountBal并不代表相同的信息。我更喜欢这个,但是我仍然不相信它对他有用。我们需要看看他是如何格式化他的输入文件的!是的,我更喜欢他将账户余额解析为双精度或大十进制-如果输入的格式/解析不正确,则会有更多的机会中断。感谢帮助。我在while循环中使用了if语句,这消除了我的错误,然后我使用了ChrisCM的解决方案。虽然这不会引发异常,但我怀疑它是否按他希望的方式运行。显然AccountNum和AccountBal并不代表相同的信息。我更喜欢这个,但是我仍然不相信它对他有用。我们需要看看他是如何格式化他的输入文件的!是的,我更喜欢他将账户余额解析为双精度或大十进制-如果输入的格式/解析不正确,则会有更多的机会中断。感谢帮助。我在while循环中使用了if语句,这消除了我的错误,然后我使用了ChrisCM的解决方案。然后请接受这个答案。注意:Zim zam的一些错误检查和异常处理仍然是良好的实践!我只是碰巧犯了这个愚蠢的错误,我知道这是怎么回事。那么请接受这个答案。注意:Zim zam的一些错误检查和异常处理仍然是良好的实践!我只是碰巧犯了这个愚蠢的错误,而且我知道这是怎么回事。