2009-03-22 2 views
0

Я поместил несколько элементов в массив (например, 5 элементов) Первый элемент, индекс [0] массива будет автоматически отображаться без необходимости нажатия пользователем кнопки.Проблемы с массивом Java

После нажатия кнопки он будет печатать следующие элементы массива, и процессы продолжаются до последнего элемента массива. Каждый раз при нажатии кнопки файл записывается в txt-файл.

Моя проблема здесь была, есть, например, 5 элементов массива (успешно отображается при нажатии кнопки), однако только четыре файла, записанных в txt-файле. Как сделать это пять ... Helppp ... Im в мертвой дороге :-(

public class mainFrame extends JFrame implements ActionListener { 
    ........ 
    private JButton answer1 = new JButton(); 
    String [] a = {"a","b","c","d","e"} 
    in fileNumber = 0; 
    } 

public mainFramme(){ 
    System.out.println(a.get(fileNumber)) 
    fileNumber++; 
    answer1.addActionListener(this); 
    } 

public void actionPerformed(ActionEvent e) {  
    if (e.getSource==answer1) { 
     System.out.println(a.get(fileNumber)) 
     try { 
     ..... 
     fout = new FileOutputStream ("myfile.txt",true); 
     Filename = new File(files.get(fileNumber));  
     new PrintStream(fout).println (Filename); 
     new PrintStream(fout).println ("Answer 1"); 
     fileNumber++;  
     } 
     ... 
    } 

}

+0

Когда вы задаете вопрос о Java, пожалуйста, используйте «Java» тег, чтобы отразить это. – 2009-03-22 23:54:18

+0

Мне так жаль, я просто не понял этого. Определенно сделает это в следующий раз. Благодарю. – Jessy

ответ

0

Другие уже ответили уже, но из ваших комментариев я не думаю, что это ясно. Вы автоматически показываете первую строку на экране, но не в файл. Было бы лучше перенести файловые операции из метода actionPerformed(). Как вы его написали, операции с файлами вызываются только при нажатии кнопки, что никогда не бывает для первой строки.

Это может быть яснее:

public class mainFrame extends JFrame implements ActionListener { 
    ........ 
    private JButton answer1 = new JButton(); 
    String [] a = {"a","b","c","d","e"} 
    in fileNumber = 0; 
} 

public mainFrame(){ 
    nextString(); 
    answer1.addActionListener(this); 
} 

public void actionPerformed(ActionEvent e) {  
    if (e.getSource==answer1) nextString(); 
} 

private void nextString() { 
    try { 
     ..... 
     System.out.println(a.get(fileNumber)) 
     fout = new FileOutputStream ("myfile.txt",true); 
     Filename = new File(files.get(fileNumber));  
     new PrintStream(fout).println (Filename); 
     new PrintStream(fout).println ("Answer 1"); 
     fileNumber++;  
    } 
    ... 
} 
+0

Дорогой Марти Лэмб, спасибо за идею .. но я все еще не могу решить свою проблему. Когда я нажал кнопку, файл, написанный на файле actua lly на основе значения кнопки (Answer1). Если я напишу файл на первом дисплее, не нажимая кнопку, он не будет действителен для моей программы. – Jessy

+0

, например. на первом дисплее не будет ответа, потому что кнопка не нажата. – Jessy

+0

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

0

В конструкторе, где у вас есть

System.out.println(a.get(fileNumber)) 
fileNumber++; 

Он смотрит на меня например, вы печатаете одну строку в stdout (то есть на экране), не записывая ее в файл. Держу пари, вот почему вам не хватает одного из элементов массива в файле.

+0

Дорогой Дэвид, Это было потому, что файл был записан только в txt-файле при нажатии кнопки. ммм .. это было похоже ... на первый вопрос, который отображается, и когда пользователь отвечает на него (нажатие кнопки - ответ записывается в txt-файл), следующий вопрос будет отображаться ... – Jessy

+0

Cont..If, я не сделал .. Номер_файла ++; после 1-го дисплея, когда кнопка нажата, она будет указывать на то же, например. Индекс [0]. – Jessy

+0

Если я правильно вас понимаю (это, по-видимому, довольно сложно), это именно то, что я имел в виду ... –

0

Ваш приращение значения имени файла перед тем, создавать d ваш первый файл (для 0-го элемента). Это приводит к 4 файлам, а именно к элементам в индексах 1-4. 0-й файл не создается.

+0

Мне нужно сделать так, чтобы при щелчке пользователем кнопка будет автоматически отображать следующие элементы. – Jessy

+0

Да, но когда вы показываете первый элемент, вы не записываете его в файл. –

1

Ваша проблема заключается здесь:

public mainFramme(){ 
    System.out.println(a.get(fileNumber)) 
    fileNumber++ 
    answer1.addActionListener(this); 
    } 

Вы приращением Номер_файла до нажатия кнопки, так он равен 1. Массивы индексируются от 0 в Java, то есть, чтобы получить первый элемент массива вы используете массив [0] - Увидев, что fileNumber будет равен 1, вы получите второй элемент элемента массива. Таким образом, отсутствует первый.

EDIT БЛАГОДАРЯ COMMENT:

Хорошо, тогда ты звонишь флеш() и Close() методы на выходной файл потока? «flush» гарантирует, что любые данные в потоке будут выписаны до его закрытия. Это может помочь, если вы разместите весь свой метод actionPerformed.

Часть кода вы публикуемую не в идеальном либо (то есть новый PrintStream материал)

Возможно, это могло бы помочь:

public void actionPerformed(ActionEvent e) { 
    if(e.getSource() == answer1) { 
     try { 
      PrintWriter output = new PrintWriter(new FileOutputStream(fileName.txt)); 

      // Write stuff to file using output.printLn(); 
      output.flush(); 
      output.close(); 
     }catch (IOException e) { // exception handling } 
    } 
} 
+0

Я понял, что, но я решил написать файл в txt-файле всякий раз, когда нажимали кнопку Никакой файл не будет записан без нажатия кнопки. Это было похоже на то, что первые элементы indext [0] отображаются так, что пользователь будет знать, какую кнопку нажать. – Jessy

0

У вас не хватает кучу запятой - я не уверен, если это вызывает проблему (не должно даже запускаться)

Убедитесь, что в каждой строке, где нужны точки с запятой, есть.

+0

Дорогой zPesk, спасибо, что ... но на самом деле моя настоящая программа работает, просто проблема с массивом ... – Jessy

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