2013-10-14 79 views
0

我几分钟前发布了一个问题,并要求我发布“SSCCE”来证明我的问题。我大量压缩了我的程序,所以如果一些结构没有意义,或者看起来比新手的工作更加低效,那应该只是这个操作的产物。如果声明由于未知原因返回false

现在,我的程序主要用于将一系列俄语动词变形复制到集中式阵列,oneRay。在这里的设置中,空白行上方显示提示,在该空白行中输入适当的缀合。按下“提交”按钮假设检查阵列的答案,但由于我自己的错误或缺乏理解,即使直接复制我所知道的正确答案,我也会看到“失败”消息。有了这条线我得到的输入:

build1 = new StringBuilder(ssfield1.getText()); 

,并用此我检查它反对元素:

if(build1.equals(oneRay[pick][1].toLowerCase().replaceAll("\\s","")))ssfield1.setText("CORRECT"); 
    else{ssfield1.setText("FAIL");} 

我觉得这可能是检查对错误输入错误的元素的一个简单的问题文本框,但它那下跪是,所以这里是我的凝聚“SSCCE”所有代码:

不长,我希望,肯定自足(和相当简单太): 让我知道,如果你需要其他任何东西,或者如果这些问题为时已晚!

package wbh; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 


public class SwingImplementation_RUS extends JFrame{ 
String [] [] oneRay;Random random = new Random(); 
JPanel panel; JTextField field,sfield1,sfield2,ssfield1,ssfield2; JButton buton; 
int pick, hold;StringBuilder build1,build2; 
public SwingImplementation_RUS(final int subj){ 
    super("To be updated"); 
    final String RUS_1[][]={ 
     {"знать","знаю","знаешь","знает","знает","знает","знаем","знаете","знают",}}; 
    new Thread(new Runnable() { 
      public void run() { 
       buton = new JButton("Submit"); 
       setLayout(new GridLayout(3,1,3,3)); 
       panel = new JPanel();panel.setLayout(new GridLayout(5,2,3,3)); 
       field = new JTextField(); 
       sfield1 = new JTextField("Я");sfield2 = new JTextField("Ты"); 
       ssfield1 = new JTextField("");ssfield2 = new JTextField(""); 

       buton.addActionListener(new ActionListener(){ 
        public void actionPerformed(ActionEvent m) { 
         System.out.println("CHECKED"); 
         build1 = new StringBuilder(ssfield1.getText()); 
         build2 = new StringBuilder(ssfield2.getText()); 
         called2();}}); 

       Font f = new Font("Arial", Font.BOLD, 75); 
       field.setFont(f); 

       add(field); 
       add(panel); 
       panel.add(sfield1);panel.add(ssfield1); 
       panel.add(sfield2);panel.add(ssfield2); 
       add(buton); 
       setLocation(500,0);setSize(865, 700); 
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true); 
       }}).start(); 

       oneRay = new String[RUS_1.length][9]; 
       for(int i = 0; (RUS_1.length) > i; i++){ 
        oneRay[i][0] = RUS_1[i][0];oneRay[i][1] = RUS_1[i][1]; 
        oneRay[i][2] = RUS_1[i][2];} 

     try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();} 
     hold = oneRay.length;pick = random.nextInt(hold); 
     field.setText("     "+oneRay[pick][0]); 
} 
private void called2(){ 
    if(build1.equals(oneRay[pick][1].toLowerCase().replaceAll("\\s","")))ssfield1.setText("CORRECT"); 
    else{ssfield1.setText("FAIL");} 
    if(build2.equals(oneRay[pick][2].toLowerCase().replaceAll("\\s","")))ssfield2.setText("CORRECT"); 
    else{ssfield2.setText("FAIL");} 

} 
public static void main (String [] args){ 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run() { 
     new SwingImplementation_RUS(1); 
     } 
    }); 
} 

}

+2

您正在使用'equa一个StringBuilder对一个String的方法。我想这是错误。尝试'ssfield1.getText()。equals(...)' – Fildor

+2

@Fildor +1,尝试使用build1.toString()。等于 –

+0

@IlyaBursov你说得对,那应该会更好。 – Fildor

回答

3

我认为这个问题是您正在使用StringBuilder#equals,并期望它像String#equals工作。

平等为StringBuilder实施看起来像......

public boolean equals(Object obj) { 
    return (this == obj); 
} 

这仅仅是比较对象引用,不存在内容。

相反,尝试使用类似...

if (build1.toString().equals(oneRay[pick][1].toLowerCase().replaceAll("\\s", ""))) ... 

,推荐,你也应该用在你的if-else条件{},例如

if (build1.toString().equals(oneRay[pick][1].toLowerCase().replaceAll("\\s", ""))) { 
    ssfield1.setText("CORRECT"); 
} else { 
    ssfield1.setText("FAIL"); 
} 
if (build2.toString().equals(oneRay[pick][2].toLowerCase().replaceAll("\\s", ""))) { 
    ssfield2.setText("CORRECT"); 
} else { 
    ssfield2.setText("FAIL"); 
} 

这将使它更易于阅读(通常),并确保您不会意外执行您未预期的条件的功能...

+0

我会尽快接受这件事。谢谢,这是我第一次使用StringBuilder。你已经度过了我的一天! –

+1

'StringBuilder'是一个非常有用的类,它不仅仅是一个'String' ...这就是关键所在;) – MadProgrammer