无法从用户读取字符

时间:2016-09-18 10:35:42

标签: java

我编写了代码来创建$date->format('Y-m-d H:i:s') 个字符。所以我从用户那里逐个插入字符。但我只能插入一次角色。

我的代码是:

LinkList

我的输出是:

import java.io.*;

class Node {
    char a;
    Node next;

    Node(char a) {
        this.a = a;
    }
}

public class LinkList {
    static Node start;
    static Node end;

    LinkList() {
        start = null;
        end = null;
    }

    public static void main(String ar[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("enter the no. of nodes to be created");

        int n = Integer.parseInt(br.readLine());
        char a;
        for (int i = 1; i <= n; i++) {
            System.out.println("enter the value for the node");
            a = (char) System.in.read();

            Node no = new Node(a);
            insert(no);
        }
        display();
    }


    public static void insert(Node n) {
        if (start == null) {
            start = n;
            end = n;
        } else {
            end.next = n;
            end = n;
        }
    }
}

在这里我要输入6个字符,但我只能输入2个字符。 我想输入所有6个字符,但我只能输入2个字符。(a,m)

4 个答案:

答案 0 :(得分:0)

a = (char) System.in.read();之后添加以下内容

System.in.read();
System.in.read();

为什么会这样?

当您输入a并按Enter时,会读取3个字符。 a为1,Enter为2。\r\nEnter将被视为字符输入 所以字符在6次迭代中输入如下:

  1. 一个
  2. \ r
  3. \ n
  4. \ r
  5. \ n
  6. 所以你只能阅读你想要的两个字符。你可以跳过将\ r和\ n存储到你的链表中,只需阅读而不用它做任何事情。

    修改a = (char) System.in.read();,如下所示:

    a = (char) System.in.read();
    System.in.read();
    System.in.read();
    

答案 1 :(得分:0)

a = (char) System.in.read();

即使你之前创建了BufferedReader,你也是这样做的。你需要做的是:

a = (char) br.readLine()

这将读完整行。你无法read(),因为它会读取更多字符(例如输入和\r)。但这不是全部,你只需要一行中的一个字符,这样你就会有错误,你需要从这一行中提取一个字符,如下所示:

a = (char) br.readLine().charAt(0)

我认为charAt()方法不言自明。现在它会正常工作。我还建议您使用Scanner来获取用户输入,请在此处阅读Scannerclick

答案 2 :(得分:0)

你可以使用Scanner

public static void main(String ar[]) throws IOException {
    Scanner scanner = new Scanner(System.in);
    System.out.println("enter the no. of nodes to be created");

    //If input entered was not an integer - exception raised
    int n = scanner.nextInt();
    char a;
    for (int i = 1; i <= n; i++) {
        System.out.println("enter the value for the node");
        a = scanner.next().charAt(0);

        Node no = new Node(a);
        insert(no);
    }
    scanner.close();
}

答案 3 :(得分:0)

您可能希望使用不带换行符的提示修剪控制台噪音,因此请使用print("xxx")标题打印输出。读取一行(ENTER换行前的文本)并取一个字符。

import java.io.*;
import java.util.*;

class Node {
    char a;
    Node next;
    Node(char a) {
        this.a = a;
    }
}

public class LinkList {
    static Node start;
    static Node end;

    LinkList() {
        start = null;
        end = null;
    }

    public static void main(String ar[]) throws IOException {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the no. of nodes to be created: ");

        int n = Integer.parseInt( sc.nextLine().trim() );
        for (int idx=1; idx <= n; idx++) {
            System.out.print("Enter the value for the node: ");
            char a = sc.nextLine().trim().charAt(0);
            Node no = new Node(a);
            insert(no);
        }
        sc.close();
        System.out.println("Content of list");
        display();
    }

    public static void insert(Node n) {
        if (start == null) {
            start = n;
            end = n;
        } else {
            end.next = n;
            end = n;
        }
    }

    private static void display() {
        Node node = start;
        while(node!=null) {
            System.out.println(node.a);
            node = node.next;
        }
    }

}