java:在方法B中调用方法A,它最初是在A,NoSuchElementException中的callid

时间:2015-10-20 07:36:48

标签: java java.util.scanner nosuchelementexception

我正在编写一个可以编写文本文件的java应用程序。

主要是扫描仪要求用户提供一些选项。其中之一是在文件中添加某些内容。这是通过调用

来完成的
static void OptionMenu() 

方法,它使用switch case算法。

通过选择某个选项,下一个方法(例如写文件),

static void write() 

被调用。 该方法使用扫描仪。

现在,如果我添加代码

OptionMenu() 
在write()结尾处

(返回选项菜单),代码运行到此行,我收到以下错误:

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)

但如果我删除最后的代码再次调用OptionMenu()方法,我就不会收到任何错误,并且会写入所需的文件。

但是,我希望能够返回选项菜单并为用户提供执行其他选项的可能性,因此我不希望该应用程序退出。

我希望有人能提供解决方案。请参阅下面的相关代码。 提前谢谢!

此致

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

public class WoningApplicatie 
{ 
 private static Portefeuille portefeuille = new Portefeuille();

public static void main(String[] args)
{
    String options =
            "1) Voeg koopwoning toe" + "\n" +
            "2) Voeg huurwoning toe" + "\n" +
            "3) Laat huurwoningen zien" + "\n" +
            "4) Laat koopwoningen zien" + "\n" +
            "5) Sluit de applicatie";
    Println("Kies één van de volgende opties");
    Println(options);
    Println("");

    OptionMenu();

    //System.out.println(portefeuille.getWoningen().size());


}



/** Laat je uit één van de beginoptie's kiezen.
 * 
 */
static void OptionMenu()
{
    Scanner input = new Scanner(System.in);
    Print("Voer nu het optienummer in: ");
    int keuze = input.nextInt();

    switch (keuze)
    {

        case 1:
            //Voeg Koopwoning toe
            write();

            //try
            //{
                OptionMenu();
            //}catch(Exception e)
            //{ Println("kan toch niet?");
            //}

            break;
        case 2:
            Println(keuze);//Voeg huurwoning toe
            break;
        case 3:
            Println(keuze);//Laat Koopwoning zien
            break;
        case 4:
            Println(keuze);//Laat huurwoning zien
            break;
        case 5:
            Println(keuze);//Sluit de applicatie
            break;
        default:
            Println("Fout! Probeer het opnieuw. Kies één van de opties (1-5)");
            OptionMenu();
            break;
    }
    input.close();
}


static void write()
{
    Scanner woningToevoeg = new Scanner(System.in);

        try 
        {   
            Print("Straat: ");
            String straat = woningToevoeg.next();
            Print("Huisnummer: ");
            String huisnummer = woningToevoeg.next();
            Print("Postcode: ");
            String postcode = woningToevoeg.next();
            Print("Woonplaats: ");
            String woonplaats = woningToevoeg.next();
            //Adres 

            Print("aantal kamers: ");
            int kamers = woningToevoeg.nextInt();
            Print("koopprijs: ");
            int koopprijs = woningToevoeg.nextInt();
            //Woning

            Print("Energielabel (A-E): ");
            String energielabel = woningToevoeg.next();

            woningToevoeg.close();

            Adres adres = new Adres(straat, huisnummer, postcode, woonplaats);
            KoopWoning koopwoning = new KoopWoning(adres, kamers, koopprijs,"TE KOOP", energielabel);
            portefeuille.voegtoe(koopwoning);


            //This is the content to write into file
            String contentPre = portefeuille.getWoningen().size() + "\r\n";                 
            String content = koopwoning.getStatus() + "\r\n"
                    + adres.getStraat() + " " + adres.getHuisnummer() + "\r\n"
                    + adres.getPostcode() + " " + adres.getPlaats() + "\r\n"
                    + koopwoning.getKamers() + " kamers" + "\r\n"
                    + "vraagprijs " + koopwoning.getVraagPrijs() + "\r\n"
                    + "energiepeil " + koopwoning.getEnergiePeil() + "\r\n";

            File file = new File("portefeuille.txt");

            // if file doesnt exists, then create it
                if (!file.exists()) 
                {
                    file.createNewFile();
                }
            Scanner searchEmpty = new Scanner(file);

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);

            bw.write(contentPre);
                if(searchEmpty.hasNextLine());
                {

                    String random = ""; 
                    while(!random.isEmpty())
                    {
                        random = searchEmpty.nextLine();
                    }
                    bw.write(content);
                }

            bw.close();
            searchEmpty.close();

            Println("U heeft een woning toegevoegd!");

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


    }
///... some other code: Println methods for example,
}

1 个答案:

答案 0 :(得分:0)

未关闭'输入'扫描仪和'woningToevoeg'扫描仪停止了错误发生。