2013-12-05 3 views
0

Я хочу разрешить пользователю выбирать текстовый файл с разными вариантами голосования, читать программу, а затем создавать меню, из которых пользователь может голосовать от эти варианты и поместить результаты в отдельный документ. У меня есть программа, читающая текстовый файл и показывающая параметры на выходе, но я не могу понять, как сделать это в меню, из которого люди могут выбрать. Я знаю, что это имеет какое-то отношение к массиву, но проблема в том, что программа должна быть спроектирована так, чтобы независимо от количества опций в текстовом файле меню автоматически менялось.Создание оператора меню в Java из текстового файла

Я отредактировал код и он в настоящее время работает. Я назначил переменную, называемую выбором, чтобы сохранить ответ пользователя и отобразить его, чтобы увидеть, правильно ли он правильно хранит выбор пользователя, и, похоже, это так. Моя следующая проблема заключается в том, что конечная цель этого задания - позволить пользователю проголосовать столько раз, сколько пожелает, а затем, когда пользователь указывает, что они сделаны для подсчета голосов и отображения всех голосов, сделанных пользователем. Я знаю, что мне нужно включить цикл while для учетной записи для голосования несколько раз и опцию quit. У меня возникают проблемы с тем, как хранить все пользовательские варианты и отображать их в конце, так как у меня есть только одна переменная в это время, называемая «выбор». часть обновленного кода i теперь вместо предыдущего кода. Результаты я получаю в NetBeans ниже

1: Республиканский 2: Демократическая 3: Независимый Вы хотите проголосовать за: 3 выбор = 2 BUILD УСПЕШНОГО (общее время: 10 секунд)

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 
import javax.swing.JFileChooser; 
// * To change this template, choose Tools | Templates 
//* and open the template in the editor. 


    /** 
    * 

* @author */ общественного класса SurveyMaker {

/** 
* @param args the command line arguments 
*/ 
    public static void main(String[] args) { 
    JFileChooser chooser = new JFileChooser(); 
    Scanner in = null; 
    List<String> myOptions = new ArrayList<String>(); 
    if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) 
    { 
    File selectedFile = chooser.getSelectedFile(); 

    try{ 
    in = new Scanner(selectedFile); 
    int lineNumber = 1; 
    final int MAX_LINES = 9; 

    while (in.hasNextLine() && lineNumber <= MAX_LINES) 
    { 
     String line = in.nextLine(); 
     System.out.println(lineNumber + ": " + line); 
     myOptions.add(line); 
     lineNumber++; 
    } 
     System.out.println("Would you like to vote for: " + myOptions.size()); 
     Scanner scanchoice = new Scanner(System.in); 
     int choice = scanchoice.nextInt(); 
     System.out.println("choice = "+ choice); 
    if (in.hasNextLine()) 
    { 
     System.out.println("..."); 
    } 

    } 

    catch(FileNotFoundException ex) 
    { 
     System.out.println("There was an error with the file. Try again."); 
     System.exit(1); 
    } 
    catch(IOException ex) 
    { 
     System.out.println("There was an error with the file. Try again."); 
     System.exit(1); 
    } 
    } 
    else { 
     System.out.println("You didn't choose a file."); 
     System.exit(0); 
    } 
    } 
    }  

ответ

0

Создайте ArrayList и добавьте каждую строку из файла в нее. Если вы хотите создать текстовое меню, это так же просто, как распечатать каждый, и попросить пользователя ввести номер, соответствующий их выбору (с некоторой проверкой, конечно). Если вы хотите создать меню графического интерфейса, это немного больше.

1
while (in.hasNextLine() && lineNumber <= MAX_LINES) 
{ 
    String line = in.nextLine(); 
    System.out.println(lineNumber + ": " + line); 
    lineNumber++; 
} 

Здесь вы должны добавить логику. У вас уже есть код, который извлекает линии отдельно, вам просто нужно создать систему, которая работает с каждым из них. Вы по существу разбиваете файл на 1 сегмент.

Как уже упоминалось в других ответах, объект ArrayList может использоваться для хранения объектов для последующего использования. Если вы хотите создать ArrayList и хранить строки в нем вы бы объявить его как таковой:

List<String> myOptions = new ArrayList<String>(); 

Теперь вы можете использовать myOptions в цикле:

while (in.hasNextLine() && lineNumber <= MAX_LINES) 
{ 
    String line = in.nextLine(); 
    System.out.println(lineNumber + ": " + line); 
    myOptions.add(line); 
    lineNumber++; 
} 

Теперь, когда пользователь делает выбор номера строки соответствует индексу массива + 1. Поэтому, если они хотят выбрать вариант 2, вы можете работать с myOptions.get(1). Или более общий myOptions.get(selection - 1) Просто убедитесь, что вы проверяете выбор пользователя, чтобы убедиться, что вы не выходите за пределы! (Подсказка: используйте myOptions.size())

+0

Я собираюсь перестроить дальше под новым кодом. Не могли бы вы посмотреть на это и посмотреть, будет ли это работать лучше? – user3072210

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