Как сказано в заголовке, я хотел бы сканировать всю строку ввода, используя только один ввод от пользователя. Ввод должен быть похож на «Эрик 22 1».

Если nextString() не следует использовать таким образом, я должен просто использовать hasNext?

КОД JAVA:

import java.util.Scanner;

public class tugas1
{
    public static void main(String []args)
    {
        String name;
        int age;
        boolean sex;

        Scanner sc = new Scanner(System.in);

        System.out.println("Please input your name, age, and sex(input 1 if you are a male, or 0 if you are a female) :");
        name = sc.nextString();
        age = sc.nextInt();
        sex = sc.nextBoolean();

        if(isString(name))
        {
            if(isInteger(age))
            {
                if(isBoolean(sex))
                {
                    System.out.println("Correct format. You are :" +name);
                }
                else
                {
                    System.out.println("Please input the age in integer");
                }
            }
            else
            {
                System.out.println("Please input the age in integer");
            }
        }
        else
        {
            System.out.println("Please input the name in string");
        }
    }
}

После добавления и редактирования строк:

System.out.println("Please input your name, age, and sex(input 1 if you are a male, or 0 if you are a female) :");
    String input = sc.nextLine();

String[] inputAfterSplit = input.split(" ");

String name = inputAfterSplit[0];
int age = Integer.parseInt(inputAfterSplit[1]);
boolean sex = Boolean.parseBoolean(inputAfterSplit[2]);

Я хотел бы добавить if (name instanceof String). Я давно не прикасался к Java и забыл, что это способ использования instanceof, или это неправильно? Дело в том, что я хочу сравнить, находится ли входная переменная в int, string или bool.

if(name instanceof String)
{
    if(age instanceof Integer)
    {
        if(sex instanceof Boolean)
        {    
            System.out.println("All checked out")
        }
        else
        {
            System.out.println("Not boolean")
        }
    else
    {
        System.out.println("Not int")
    }

System.out.println("Not string")
}

Эти строки будут работать?

0
KaeM 12 Май 2014 в 06:27

3 ответа

Лучший ответ

Пожалуйста, введите свое имя, возраст и пол

Поскольку вам нужно вставить значения в определенной последовательности.


Используйте nextLine() и выполните split

Например: "Abc 123 true 12.5 M"

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

И у вас будет

s[0]="Abc"
s[1]="123"
s[2]="true"
s[3]="12.5"
s[4]="M"

Затем разобрать их до требуемого типа.

String first=s[0];
int second=Integer.parseInt(s[1].trim());
boolean third=Boolean.parseBoolean(s[2].trim());
double forth=Double.parseDouble(s[3].trim());
char fifth=s[4].charAt(0);

Как предлагает ваш код и как сказано в David, вы можете изменить только это

    name = sc.next();//will read next token
    age = sc.nextInt();
    sex = (sc.next()).charAt(0);//change sex to character for M and F
    //or //sex = sc.nextInt();//change it to int
0
ΔȺȾΔ 12 Май 2014 в 04:42

Во-первых, когда мы используем scanner, у нас нет метода под названием nextString()

Поэтому вместо этого мы должны использовать next() для чтения строки.

Во-вторых, если вы хотите прочитать всю строку, используйте nextLine(), который прочитает всю строку в виде текста и поместит ее в строку.

Теперь String, который читается как entire line, может быть split на основе разделенного символа (предположим, что в нашем случае это пробел)

Затем приведите string array и parse каждому элементу к требуемому типу.

Лучше, если мы будем использовать try/catch во время синтаксического анализа, чтобы мы могли поймать исключение для нежелательного формата для ввода и передать его пользователю.

Пример кода без try / catch, но вы используете try / catch в соответствии с вашими потребностями

Scanner sc = new Scanner(System.in);

    System.out.println("Please input your name, age, and sex(input 1 if you are a male, or 0 if you are a female) :");
      String input = sc.nextLine();

      String[] inputAfterSplit = input.split(" ");

      String firstParam = inputAfterSplit[0];
      int secondParam=Integer.parseInt(inputAfterSplit[1]);
      boolean thirdParam=Boolean.parseBoolean(inputAfterSplit[2]);
0
Karibasappa G C 12 Май 2014 в 02:46

Все это переработано, это переделка кода на тот случай, если у людей возникнут такие же проблемы, как у меня .. int в delcaration следует изменить на Integer

import java.util.Scanner;
import java.lang.*;

public class tugas1
{
public static void main(String[] args)
{
    Scanner sc = new Scanner(System.in);

    System.out.println("Input number of line :");
    int lineNum = sc.nextInt();

    String[] name = new String[lineNum];
    Integer[] age = new Integer[lineNum];
    String[] gender = new String[lineNum];

    System.out.println("Please input your name, age, and gender(Male/Female) \n(Separate each line by an enter) :");
    for ( int i = 0; i < lineNum; i++)
    {
        System.out.print("Line " + (i+1) + " : ");
        name[i] = sc.next();
        age[i] = sc.nextInt();
        gender[i] = sc.next();
    }

    for ( int j = 0; j < lineNum; j++ )
    {
        if (name[j] instanceof String)
        {
            if (age[j] instanceof Integer)
            {
                if (gender[j] instanceof String)
                {
                    System.out.println("Person #" + (j+1) +  " is " + name[j] + ", with age of " + age[j] + " years old, and gender " + gender[j]);
                }
                else
                {
                    System.out.println("Gender is missing");
                }
            }
            else
            {
                System.out.println("Age and Gender are");
            }
        }
        else
        {
            System.out.println("Name, Age and Gender are missing");
        }
    }
}  

}

0
KaeM 12 Май 2014 в 16:49