Массив не расположен в правой строке [Java] - PullRequest
0 голосов
/ 04 февраля 2012

это продолжение этого вопроса: Присвоение 1 строки текстового файла строке через сканер Я реализовал ArrayList так, чтобы, если ответ предоставлен, программа не спала 10 000 миллисекунд (в противном случае она попросит вас «посмотреть») (обратите внимание, что формат a.txt

  • Вопрос
  • Ответ
  • Вопрос
  • Ответ)

Однако, когда я запускаю программу, даже если ответ предоставлен, она все равно просит вас «посмотреть» вместо того, чтобы спать, я почти уверен, что это связано с тем, как у меня получилось найти вопрос / ответ. Вот мой код, Eclipse не показывает ошибок -

    public class Test {
    public static void main(String[] args) throws InterruptedException {

    // Location of file to read
    File file = new File("a.txt");
    List<String> lines = new ArrayList<String>();

    try {

        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            lines.add(scanner.nextLine());
        }
        scanner.close();
        for (int i = 1 ; i < lines.size(); i+=2)
        {
            String question = lines.get(i - 1);
            String answer   = lines.get(i += 1);
            String a = JOptionPane.showInputDialog("" + question);
            if (a==answer){
                Thread.sleep(10000);
            }else
                JOptionPane.showMessageDialog(null,"Please look it up");
        }
    } catch (FileNotFoundException e) {
     System.out.println("Can't find file");  
    }
}
}

Спасибо за любую помощь. Изменить: мой код теперь выглядит так и все еще не работает - http://pastebin.com/C16JZGqH

Ответы [ 5 ]

6 голосов
/ 04 февраля 2012

При сравнении строк используйте .equals

if (a==answer){

должно быть

if (a.equals(answer)){

РЕДАКТИРОВАТЬ: На первый взгляд кажется, что сравнение строк было проблемой, однако, как Скотт упоминает вего ответ это не единственная ваша проблема.Вы автоматически увеличиваете управляющую переменную для циклов for внутри цикла, которая является подсказкой того, где происходит путаница.

Измените ваш цикл следующим образом, запустите переменную управления с 0,и обратите внимание на изменение lines.get звонков

for (int i = 0 ; i < lines.size(); i+=2)
        {
            String question = lines.get(i);
            String answer   = lines.get(i+1);
            String a = JOptionPane.showInputDialog("" + question);
            if (a.equals(answer){
                Thread.sleep(10000);
            }else
                JOptionPane.showMessageDialog(null,"Please look it up");
        }
4 голосов
/ 04 февраля 2012

Опасность!Опасно!

String answer   = lines.get(i += 1);

Автоинкремент внутри вызова функции и переменной управления циклом - это не может быть хорошо.

0 голосов
/ 04 февраля 2012

Вы говорите, что это все еще не работает, но это так. Попробуйте еще раз:

import java.io.*;
import java.util.*;
import javax.swing.*;

public class Test {
   public static void main(String[] args) throws InterruptedException {
      // Location of file to read
      File file = new File("a.txt");
      List<String> lines = new ArrayList<String>();
      try {
         Scanner scanner = new Scanner(file);
         while (scanner.hasNextLine()) {
            lines.add(scanner.nextLine());
         }
         scanner.close();
         for (int i = 0 ; i < lines.size(); i+=2)
         {
            String question = lines.get(i );
            String answer   = lines.get(i + 1);
            String a = JOptionPane.showInputDialog("" + question);
            if (a.equals(answer)){
               Thread.sleep(1000);
            } else
               JOptionPane.showMessageDialog(null,"Please look it up");
         }
      } catch (FileNotFoundException e) {
         System.out.println("Can't find file");  
      }
   }
}
0 голосов
/ 04 февраля 2012
for (int i = 1 ; i < lines.size(); i+=2)
        {
            String question = lines.get(i - 1);
            String answer   = lines.get(i);
            String a = JOptionPane.showInputDialog("" + question);
            if (a==answer){
                Thread.sleep(10000);
            }else
                JOptionPane.showMessageDialog(null,"Please look it up");
        }
0 голосов
/ 04 февраля 2012

Используйте метод equals() для сравнения двух строк, а не ==

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...