扫描器Java无法在for循环中获取输入

时间:2019-06-18 14:16:37

标签: java for-loop java.util.scanner

我正在尝试从Java中的Scanner获取多个输入,输入必须处于for循环中。 正如我在for中所述,单个输入正在工作,第一个cicle可以按预期工作,但是第二个在第一个输入处停止。 在循环之前,我得到一个整数,因此我将scan.nextLine()放入以获取'\ n'字符,在循环中,我仅使用字符串。

我想知道问题可能是流关闭,但是我需要将其打开,关闭它会得到扫描仪异常。

public void scegliEsame(Medico m)
{
    Scanner scan=new Scanner(System.in);
    String nome, data;

    System.out.print("Inserire numero di esami da prenotare: ");
    int ex=scan.nextInt();
    System.out.println();
    scan.nextLine();
    for(int i=0;i<ex;i++)
    {
        System.out.print("Inserire nome esame da voler effettuare: ");
        nome=scan.nextLine();

        if(m.getCosto(nome)==-1)
        {
            System.out.println("Esame non trovato");
            return;
        }
        else
            costo+=m.getCosto(nome);


        System.out.print("Inserire data di prenotazione: ");
        data=scan.nextLine();
        Esame e=new Esame(nome, m, data,costo);
        esami.add(e);
    }
}

第二类的代码方法

public void caricaEsami(Medico m)
{
    String esame;
    float costo;
    System.out.print("Inserire numero di esami totali: ");
    Scanner scan=new Scanner(System.in);
    int n=scan.nextInt();
    scan.nextLine();
    for(int i=0;i<n;i++)
    {
        scan=new Scanner(System.in);
        System.out.print("Inserire esame "+(i+1)+": ");
        esame=scan.nextLine();
        System.out.print("Inserire costo esame: ");
        costo=scan.nextFloat();
        Esame e=new Esame(esame, m, costo);
        m.setEsame(e);
        scan.nextLine();
    }
    medici.add(m);
}

对代码中的意大利语感到抱歉,希望您能为我提供帮助。

3 个答案:

答案 0 :(得分:0)

由于您的问题是Scanner的问题,您可以检查一下是否适合您吗?您很可能还有其他问题。

import java.util.*;
public class Main
{
    public static void main(String[] args) {
        System.out.println("Hello World");
        scegliEsame();
    }

    public static void scegliEsame(){
        Scanner scan=new Scanner(System.in);
        String nome, data;

        System.out.print("Enter number of exams to be booked: ");
        int ex=scan.nextInt();
        System.out.println();
        scan.nextLine();
        for(int i=0;i<ex;i++)
        {
            System.out.print("Enter exam name you want to make: ");
            nome=scan.nextLine();
            System.out.println("You Entered: " + nome);

        }
    }
}

答案 1 :(得分:0)

此代码看起来不错,并且对我有用。


public class Test {

    List<String> list1 = new ArrayList<>();
    List<String> list2 = new ArrayList<>();

    public static void main(String[] args) {
        new Test().scegliEsame();   
    }

    public void scegliEsame()
    {
        Scanner scan=new Scanner(System.in);
        String nome, data;

        System.out.print("Inserire numero di esami da prenotare: ");
        int ex=scan.nextInt();
        System.out.println();
        scan.nextLine();

        for(int i=0;i<ex;i++)
        {
            System.out.print("Inserire nome esame da voler effettuare: ");
            nome=scan.nextLine();

            if(false)
            {
                System.out.println("Esame non trovato");
                return;
            }
            else
                list1.add(nome);


            System.out.print("Inserire data di prenotazione: ");
            data=scan.nextLine();
            list2.add(data);
        }
        System.out.println(list1+"\n\n"+list2);
    }
}

答案 2 :(得分:0)

如果您想多次使用nextLine(),则可能会遇到此问题,因为它将把第一个输入中的\n作为输入。为避免这种情况,请使用next()