输入字符串:线程“main”中出现异常 java.util.NoSuchElementException:在 java.base/java.util.Scanner.nextLine 找不到行(Scanner.java:1651)

Input string: Exception in thread "main" java.util.NoSuchElementException: No line found at java.base/java.util.Scanner.nextLine(Scanner.java:1651)

提问人:Chris Ndirangu 提问时间:11/12/2022 更新时间:11/12/2022 访问量:58

问:

为什么我会收到此错误

Input string:
Exception in thread "main" java.util.NoSuchElementException: No line foundat java.base/java.util.Scanner.nextLine(Scanner.java:1651)at TMSimulator.main(TMSimulator.java:15)

import java.util.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator; 
import java.util.Scanner;
import java.io.FileReader;

public class TMSimulator {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("Input string: ");
        String inputString = input.nextLine();

        int numStates = 0;
        int haltingState = 0;
        int[][] transitionTable = {
         { 0, 0, 0 },
         { 0, 0, 0 },
         { 0, 0, 0 }
      };
      

        try {

            File file = new File("TM.txt");
            Scanner sc = new Scanner(file);

            numStates = Integer.parseInt(sc.nextLine());
            haltingState = Integer.parseInt(sc.nextLine());

            transitionTable = new int[numStates][256];

            for (int i = 0; i < numStates; i++) {
                for (int j = 0; j < 256; j++) {
                    transitionTable[i][j] = -1;
                }
            }

            while (sc.hasNextLine()) {
                String line = sc.nextLine();

                String[] parts = line.split(" ");

                int state = Integer.parseInt(parts[0]);
                int character = Integer.parseInt(parts[1]);
                int writeCharacter = Integer.parseInt(parts[2]);
                String direction = parts[3];
                int nextState = Integer.parseInt(parts[4]);

                transitionTable[state][character] = writeCharacter;

                if (direction.equals("R")) {
                    transitionTable[state][character + 128] = nextState + 128;
                } else if (direction.equals("L")) {
                    transitionTable[state][character + 128] = nextState;
                } else {
                    transitionTable[state][character + 128] = nextState;
                }
            }

            sc.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        int state = 0;
        int head = 0;

        System.out.println(state + " " + inputString);

        while (state != haltingState) {

            int character = inputString.charAt(head);
            int writeCharacter = transitionTable[state][character];

            if (writeCharacter == -1) {
                System.out.println("Invalid input string");
                return;
            }

            inputString = inputString.substring(0, head) + (char) writeCharacter + inputString.substring(head + 1);

            if (writeCharacter >= 128) {
                state = writeCharacter - 128;
            } else {
                state = 0;
            }

            if (writeCharacter >= 0 && writeCharacter < 128) {
                head++;
            } else if (writeCharacter >= 128 && writeCharacter < 256) {
                head--;
            }

            if (head == -1) {
                inputString = "_" + inputString;
                head++;
            }

            if (head == inputString.length()) {
                inputString = inputString + "_";
            }

            System.out.println(state + " " + inputString);

        }
    }
}

代码给出了这个错误

Input string:
Exception in thread "main" java.util.NoSuchElementException: No line foundat java.base/java.util.Scanner.nextLine(Scanner.java:1651)at TMSimulator.main(TMSimulator.java:15)

所以我正在做的是读取输入字符串,出于本例的目的,我使用 11 从这里我使用一个文件处理程序,读取第一个 id 行,然后第二个它所做的就是将 numStates 和停止状态分开 整数,所以现在我有 1 个输入。 接下来,我尝试将所有数据拆分为由下一行分隔符分隔的行;但是我不知道如何处理多个,测试的东西 在数组中,我知道最终使用 ;不是需要的。

我在想两件事:在我的文件路径中制作一个带有 [][] 的每个组合的嵌套数组,或者做一个逐行读取并将它们拆分为仅在字符串中的每个空白处分隔的方法,但是......如何将案例归档变量和循环放在一起。

第二个想法:我的 tm 有状态,所以使用缩进的 num 可以被认为是 e 和 0,但是我需要保留某种排序系统,也许是 ASCII 值?

但是,当我想确保接受正确的状态时,我会说 m = (state1 = 1) < 2;brainf*rk 类型?

异常 java.util.scanner nosuchelementexception 图灵机

评论

0赞 crazo7924 11/12/2022
Scanner 类有一个名为 nextInt 的方法
0赞 Chris Ndirangu 11/12/2022
我在哪里修复它?

答: 暂无答案