2015-10-25 66 views
2

我有這個程序,它應該存儲在txt文件中的鍵盤請求的信息,但這不保存最後的請求將是一個名爲「cole」的ArrayList,如果我可以幫助這個請。放棄最後一個ArrayList

package lab1; 
import java.util.Scanner; 
import java.io.*; 
import java.util.ArrayList; 
public class Lab1 { 

public static void main(String[] args) { 
    // TODO code application logic here 

    int opc; 
    Scanner entrada = new Scanner(System.in); 
    System.out.println("MENU: Eligue su opcion\n"); 
    System.out.println("1.- Crear archivo"); 
    System.out.println("2.- Mas opciones para mostrar"); 
    System.out.println("3.- Escritura en el archivo"); 
    System.out.println("4.- Salir\n"); 
    System.out.println("Introdusca su opcion:"); 
    opc = entrada.nextInt(); 

    if (opc == 1){ 
     FileWriter fichero = null; 
     PrintWriter pw = null; 
     try{ 

     //Tiempo al programa de suspencion. 
      Thread.sleep(2000); 
      //se abre el archivo txt si este esta creado y el TRUE hace que no borre la informacio que este contiene si es que existe el txt. 
      fichero = new FileWriter("C:\\Users\\Levenor\\Desktop\\Test\\test.txt", true); 
      pw = new PrintWriter(fichero); 

      //En estos parametros se pide la informacion para agregarlo en una lista para luego colocar en el txt. 

      ArrayList<String> nombre = new ArrayList<String>(); 
      System.out.println("Ingrese Nombre: "); 
      nombre.add(entrada.nextLine()); 
      Thread.sleep(8000); 

      ArrayList<String> rut = new ArrayList<String>(); 
      System.out.println("Ingrese RUT: "); 
      rut.add(entrada.nextLine()); 
      Thread.sleep(8000); 

      ArrayList<String> edad = new ArrayList<String>(); 
      System.out.println("Ingrese EDAD: "); 
      edad.add(entrada.nextLine()); 
      Thread.sleep(4000); 

      // here is arraylist is not save in the archive txt  

      ArrayList<String> cole = new ArrayList<String>(); 
      System.out.println("Ingrese COLEGIO: "); 
      cole.add(entrada.nextLine()); 
      Thread.sleep(4000); 

      //Esta linea hace que las listas se guarden en el archivo de txt. 
      pw.println("" +nombre +rut +edad +cole); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
      // Nuevamente aprovechamos el finally para 
      // asegurarnos que se cierra el fichero. 
      if (null != fichero) 
       fichero.close(); 
      } catch (Exception e2) { 
       e2.printStackTrace(); 
      } 
     } 
    } 
} 
+0

也許你有test.txt的空行?將以下語句拆分:'cole.add(entrada.nextLine());'分成三步:'String line = entrada.nextLine(); System.out.println(「未保存的行是:」+行); cole.add(line);'這會幫助你看看發生了什麼。 – alfasin

+0

@alfasin問題在於'nextInt()'不會消耗換行符,因此您需要調用nextLine()來推進掃描器以匹配輸入。請參閱下面的答案。 – doublesharp

+0

拼寫爲「introduzca」,而不是「introdusca」;也是「opción」 - 帶有口音。什麼是錯誤的拼字法:( –

回答

0

你是一個缺少entrada.nextLine()呼叫opc = entrada.nextInt();之後 - 它不能正常推進輸入。當您致電entrada.nextInt()時,它將消耗int值,但不會消耗結尾處的換行符。因此您需要致電nextLine()以移動Scanner

系統也應該暫停 - 您不需要使用Thread.sleep() - 這是它沒有正確對齊輸入的症狀。您還應確保關閉finally區塊中的Scanner entrada

示例代碼:

public static void main(String[] args) { 
    Scanner entrada = new Scanner(System.in); 
    System.out.println("Introdusca su opcion:"); 

    // Get the int value here, but not the newline 
    int opc = entrada.nextInt(); 

    // **** Advance to the next line here **** 
    entrada.nextLine(); 

    if (opc == 1){ 
     try{ 
      System.out.println("Ingrese Nombre:"); 
      String nombre = entrada.nextLine(); 

      System.out.println("Ingrese RUT:"); 
      String rut = entrada.nextLine(); 

      System.out.println("Ingrese EDAD:"); 
      String edad = entrada.nextLine(); 

      System.out.println("Ingrese COLEGIO:"); 
      String cole = entrada.nextLine(); 

      System.out.println("nombre: " + nombre); 
      System.out.println("rut: " + rut); 
      System.out.println("edad: " + edad); 
      System.out.println("cole: " + cole); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      // make sure to close the Scanner 
      entrada.close(); 
     } 
    } 
    System.exit(0); 
} 

輸出示例:

Introdusca su opcion: 
1 
Ingrese Nombre: 
nombre 
Ingrese RUT: 
rut 
Ingrese EDAD: 
edad 
Ingrese COLEGIO: 
colegio 

nombre: nombre 
rut: rut 
edad: edad 
cole: colegio 
相關問題