Java 对于循环填充数组[0],仅此而已

Java 对于循环填充数组[0],仅此而已,java,arrays,for-loop,Java,Arrays,For Loop,for循环的目的是为文件中的每一行文本创建一个新的currentJob,并将其存储在数组中。循环存储第一行文本,但不存储任何其他内容 public static void job() { File file = new File("DailyJobs.txt"); try { Scanner scanner = new Scanner(file); while(scanner.hasNextLine()) {

for循环的目的是为文件中的每一行文本创建一个新的currentJob,并将其存储在数组中。循环存储第一行文本,但不存储任何其他内容

public static void job()
{
    File file = new File("DailyJobs.txt");

    try
    {
        Scanner scanner = new Scanner(file);
        while(scanner.hasNextLine())
        {
            String line = scanner.nextLine();
            Scanner lineScanner = new Scanner(line);
            lineScanner.useDelimiter(",");

            Job[] jobArray = new Job[30];

            for (int i = 0; i < jobArray.length; i++)
            {
                Job currentJob = new Job();

                int jID = lineScanner.nextInt();
                int cID = lineScanner.nextInt();
                String rego = lineScanner.next();
                String date = lineScanner.next();
                String day = lineScanner.next();
                double fee = lineScanner.nextDouble();

                int[] sc = new int[4];
                int f = 0;
                while(lineScanner.hasNextInt())
                {
                    lineScanner.useDelimiter(",");
                    sc[f] = (lineScanner.nextInt());
                    f++;
                }

                currentJob.setJobID(jID);
                currentJob.setCustomerID(cID);
                currentJob.setRegistration(rego);
                currentJob.setDate(date);
                currentJob.setDay(day);
                currentJob.setTotalFee(fee);
                currentJob.setServiceCode(sc);

                jobArray[i] = currentJob;


                System.out.println(currentJob.getJobID());
                System.out.println(currentJob.getCustomerID());
                System.out.println(currentJob.getRegistration());
                System.out.println(currentJob.getDate());
                System.out.println(currentJob.getDay());
                System.out.println(currentJob.getTotalFee());
                System.out.println(Arrays.toString(currentJob.getServiceCode()));

                System.out.println(Arrays.toString(jobArray));



            }


        }
    }catch (Exception e)
    {

    }
}
}
90301到[12041205,0,0]是行的内容。正如您所看到的,它存储的是文本文件的第一行,然后什么都没有。我需要帮助来解决这个问题

完全忘记了catch语句是空的,但是是的,它显示了一些问题

java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1530)
    at java.util.Scanner.nextInt(Scanner.java:2160)
    at java.util.Scanner.nextInt(Scanner.java:2119)
    at test3.job(test3.java:31)
    at test3.main(test3.java:9)
以上就是我得到的

DailyJobs.txt

90301,14304,ITGURU,11/11/2014,Tuesday,735.75,1204,1205
90302,14314,ROK5TR,12/11/2014,Wednesday,335.75,1205
90303,14318,HRTBRK,13/11/2014,Thursday,125.5,1200
90304,14310,EVOH8R,14/11/2014,Friday,1207.95,1211
90305,14300,G4MER,11/11/2014,Tuesday,500,1204,1202
90306,14312,COFFEE,11/11/2014,Tuesday,100,1202
90307,14316,POPULR,11/11/2014,Tuesday,150,1203
90308,14317,WRXSTI,11/11/2014,Tuesday,1307.95,1211,1202
90309,14321,FAST,11/11/2014,Tuesday,400,1204
90310,14308,PRQUL8,14/11/2014,Friday,150,1203
90311,14315,OK2BL8,14/11/2014,Friday,335.75,1205
90312,14320,OLDGUY,11/11/2014,Tuesday,1207.95,1211
90313,14313,ABC123,12/11/2014,Wednesday,,1202,1203,1205,1210
90314,14306,WAIT,11/11/2014,Tuesday,150,1203
90315,14302,FUZZ,14/11/2014,Friday,335.75,1205
90316,14313,GO,12/11/2014,Wednesday,,1204,1202
90317,14309,SING,13/11/2014,Thursday,400,1204
90318,14307,MANIC,12/11/2014,Wednesday,100,1202
90319,14305,URABUS,14/11/2014,Friday,1207.95,1211
90320,14303,STOP,14/11/2014,Friday,150,1203
90321,14310,BAKOFF,11/11/2014,Tuesday,,1204,1205
90322,14322,WINNER,14/11/2014,Friday,1207.95,1211
90323,14324,KITTY,13/11/2014,Thursday,400,1204
90324,14325,WEDDIN,12/11/2014,Wednesday,100,1202
90325,14326,FIGHTR,11/11/2014,Tuesday,100,1202
90326,14320,OLDGUY,14/11/2014,Friday,175.9,1208
90327,14322,QUICK,12/11/2014,Wednesday,,1203,1204,1209
90328,14322,L8R,13/11/2014,Thursday,400,1204
90329,14299,TRUTH,13/11/2014,Thursday,80.25,1197
90330,14337,NIGHT,13/11/2014,Thursday,150,1203
90331,14312,COFFEE,13/11/2014,Thursday,350,1204
你应该把

        String line = scanner.nextLine();
        Scanner lineScanner = new Scanner(line);
        lineScanner.useDelimiter(",");

在for循环中。

您提到异常
NoTouchElementException
发生在以下位置:

int jID = lineScanner.nextInt();
这意味着,扫描器试图读取一个不存在的int。主要问题是您当前的代码结构:

int jID = lineScanner.nextInt();
int cID = lineScanner.nextInt();
String rego = lineScanner.next();
String date = lineScanner.next();
String day = lineScanner.next();
double fee = lineScanner.nextDouble();

// omitted code
while(lineScanner.hasNextInt())
{
    lineScanner.useDelimiter(",");
    sc[f] = (lineScanner.nextInt());
    f++;
}
您正在读取一些内容并将其分配给变量,然后一直读取到最后一个整数(
lineScanner.hasnetint()
)。如果没有更多可读取的整数,此循环将停止。在那之后,你会做更多不必要的事情

这是(inti=0;i的第一次迭代。现在是下一次迭代。
lineScanner
仍然是相同的,因此由于while(lineScanner.hasnetint())
循环,有整数要读取,但第二次迭代将到达行
int jID=lineScanner.nextInt()。扫描器试图读取int,但找不到要读取的内容,并抛出一个
NoTouchElementException

要解决此问题,您应该重置
行扫描仪
以读取新行。
或者删除
for
循环的
,因为
while(scanner.hasNextLine())
将负责读取每个可用行,并且您的
行扫描仪将正确“填充”。请重新考虑变量
Job[]jobArray=newjob[30]的当前位置。你会在文件的每一行中丢失他的数据。

好吧,你应该得到30次控制台打印。检查最后一次打印是否显示完整的
jobArray
。可能会引发
异常
,但由于在
catch
语句中未打印任何内容,因此程序似乎正常结束。添加一个
e.printStackTrace()catch
语句中编写>并向我们显示结果。永远不要忽略异常place System.out.println(Arrays.toString(jobArray));在for循环之外,它只是使它不打印任何东西。这意味着你的代码在for循环的某个地方被中断和停止。你能在给出错误的代码中添加行吗?它告诉我int jID=lineScanner.nextInt();导致问题扫描您添加的DailyJobs.txt,我认为这是导致问题的原因我添加了文本文件,而(lineScanner.hasnetint()){lineScanner.useDelimiter(,”);sc[f]=(lineScanner.nextInt());f++;}用于我的服务代码设置程序,我应该更改扫描仪的名称吗?@Ashleigh此循环从当前行读取剩余的整数(如果有4个以上的值,这将导致
ArrayIndexOutOfBoundsException
)。在该循环之后,读取指针将位于行的末尾。因此,如果您的代码达到
int jID=lineScanner.nextInt()第二次。我是否应该将数组设置为2D以更好地容纳ServiceCode数组,而不是使用我的方式?
int jID = lineScanner.nextInt();
int cID = lineScanner.nextInt();
String rego = lineScanner.next();
String date = lineScanner.next();
String day = lineScanner.next();
double fee = lineScanner.nextDouble();

// omitted code
while(lineScanner.hasNextInt())
{
    lineScanner.useDelimiter(",");
    sc[f] = (lineScanner.nextInt());
    f++;
}