2016-03-03 5 views
0

У меня есть программа, которая запрашивает у пользователя ввод чисел и символов. Для этого я использую класс Scanner. Но когда я беру два последующих строковых ввода, консоль просто перемещается и просит пользователя ввести вторую строку. Пользователь не может ввести первую строку. Я приложил свой код ниже, чтобы быть более конкретным..nextLine() метод не принимает последующие входы String

import java.util.Scanner; 

class XYZ { 

    public static void main(String args[]) { 
     int x, y, z, b, c; 
     String p, q; 
     Scanner sc = new Scanner(System.in); 

     System.out.println("Enter a number"); 
     b = sc.nextInt(); 

     System.out.println("Enter a new number"); 
     c = sc.nextInt(); 

     System.out.println("Enter a String"); 
     p = sc.nextLine(); 

     System.out.println("Enter a new String"); 
     q = sc.nextLine(); 

     System.out.println("Enter a number"); 
     x = sc.nextInt(); 

     System.out.println("Enter 2nd number"); 
     y = sc.nextInt(); 

     System.out.println("Enter 3rd number"); 
     z = sc.nextInt(); 

     ABC a = new ABC(); 

     a.PQR(b, c); 
     a.PQR(p, q); 
     a.PQR(x, y, z); 
    } 
} 

class ABC { 

    void PQR(int a, int b) { 
     int res = a + b; 
     System.out.println("The sum is" + " " + res); 
    } 

    void PQR(String a, String b) { 
     System.out.println("Thye concataneted string is" + a + " " + b); 
    } 

    void PQR(int a, int b, int c) { 
     int res = a * b * c; 
     System.out.println("The product is" + " " + res); 
    } 
} 

ответ

2

Вам необходимо сделать фиктивный звонок до nextLine() после вашего звонка на номер nextInt(). nextInt() не учитывает «\ n».

Альтернативно и предпочтительно использовать только nextLine() принимать все входные данные и в зависимости от того из них должны быть ints, просто используйте:

int i = Integer.parseInt(**string**); 

ли эта помощь?

+0

Я сделал фиктивный вызов next(), но все же я не могу ввести первую строку. Также я хочу использовать один и тот же объект класса сканера для целых и строковых входов. –

+0

@PratikPaul Я ошибочно написал 'next()' вместо 'nextLine()'. Извини за это! –

+0

Я использую перечисленный альтернативный метод для получения входов Integer с консоли. – shrmn

2

Это потому, что сканер # метод nextInt не потребляет последний символ новой строки вашего ввода, и, таким образом, что новая строка потребляется в следующем вызове сканера # nextLine.

ref

ИЛИ

Если вы используете метод nextLine() сразу после метода nextInt(), напомним, что nextInt() считывает целое число лексем, из-за этого, последний символ новой строки для этой строки целочисленного ввода по-прежнему помещается в очередь во входном буфере, а следующий nextLine() будет считывать остаток целой строки (пустой). - hackerrank.com

Update: После c = sc.nextInt(); вам нужно поставить еще одно заявление, т.е.

sc.nextLine(); 

HTH!

+0

Так что бы ваше предложение, чтобы ввести первую Строку –

+0

Пожалуйста найти обновленный ответ. –

1
import java.util.Scanner; 

public class Solution { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     int i = sc.nextInt(); 
     sc.nextLine(); 
     double d = sc.nextDouble(); 
     sc.nextLine(); 
     String s = sc.nextLine(); 

     System.out.println("String: " + s); 
     System.out.println("Double: " + d); 
     System.out.println("Int: " + i); 
    } 
} 

принять три строки ввода: INT, двойной и струнных

1

импорта java.util.Scanner;

общественного класс Решения {

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    int i = scan.nextInt(); 
    double d = scan.nextDouble(); 
    scan.nextLine(); 
    String s = scan.nextLine(); 

    // Write your code here. 

    System.out.println("String: " + s); 
    System.out.println("Double: " + d); 
    System.out.println("Int: " + i); 
} 

}

Смежные вопросы