최근에 Java를 배우기 시작했으며 StringBuilder
클래스에 문제가 있습니다. StringBuilder
인스턴스가 있고 많은 문자열을 추가 한 후에 새 시퀀스를 추가하기 위해이 인스턴스를 비우고 싶습니다.StringBuilder 및 ArrayIndexOutOfBoundsException을 다시 사용하십시오.
해당 변수에 대해 delete
, setLength
등의 새 StringBuilder를 할당하는 것과 같은 여러 가지 작업을 시도했지만 예외가 발생했습니다. ArrayIndexOutOfBoundsException
.
왜 예외가 발생합니까? 이 작업을 효과적으로 수행하려면 어떻게해야합니까?
편집 : 그래서 자세히 내가 창 caculate 응용 프로그램과 같은 caculate 응용 프로그램을 프로그래밍하려고했던 것은, 중요한 것은 그것이 할 caculate 방법을 살았어하는 결과를해야 할 때 공정 변수가 너무 번호와 작업을 저장할 것이다 그. 그것은 정확하게 창 caculate 응용 프로그램처럼 작동합니다. 반복적으로 "+"작업을 계속 수행하면 정상적으로 작동하며, 작업 버튼을 눌렀을 때 결과를 업데이트하지만 "="버튼을 누르면 프로세스 변수에 예외 ArrayIndexOutOfBoundsException
이옵니다. 내 코드가 복잡 알고, 너희들이 해결책을 찾아 줘야하고 난 너희들이 권장 모든 솔루션을 시도 희망,이 모든 예외
public class Cal extends javax.swing.JFrame {
/**
* Creates new form Cal
*/
StringBuilder process ;
StringBuilder textOutcome ;
boolean isResult; // it means that you just hit the operation button or "=" button
boolean isRestart;// it means after you hit "=" button if after that you continue hit the operation button that will false ,if you hit numbe button it will true
public double caculate()
{
String[] split = process.toString().split(" ");
double result = Double.valueOf(split[1]);
for(int i = 2 ; i < split.length;i++)
{
if(split[i].equals("+"))
{
result += Double.valueOf(split[i + 1]);
i += 1;
}
}
return result;
}
public Cal() {
initComponents();
process = new StringBuilder();
textOutcome = new StringBuilder();
isResult = true;
isRestart = false;
GridLayout grid = new GridLayout(4,4,10,10);
JButton btnAdd = new JButton("+");
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//To change body of generated methods, choose Tools | Templates.
txtOutcome.setText(String.valueOf(caculate()));
process.append(" "+e.getActionCommand());
txtProcess.setText(process.toString());
isResult = true;
isRestart = false;
}
});
pGrid.add(btnAdd);
JButton btn4 = new JButton("4");
btn4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(isResult)
{
isResult = false;
textOutcome = new StringBuilder();
textOutcome.append(e.getActionCommand());
txtOutcome.setText(textOutcome.toString());
if(isRestart)
{
process = new StringBuilder();
isRestart = false;
}
process.append(" "+e.getActionCommand());
}
else
{
textOutcome.append(e.getActionCommand());
txtOutcome.setText(textOutcome.toString());
process.append(e.getActionCommand());
}
}
});
pGrid.add(btn4);
JButton btnResult = new JButton("=");
btnResult.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txtOutcome.setText(String.valueOf(caculate()));
process.delete(0, process.length());
process.append(String.valueOf(caculate()));
txtProcess.setText(process.toString());
isResult = true;
isRestart = true;
}
});
pGrid.add(btnResult);
pGrid.setLayout(grid);
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel pGrid;
private javax.swing.JTextField txtOutcome;
private javax.swing.JTextField txtProcess;
// End of variables declaration
}
가능한 복제 [모두 StringBuilder - 재설정하거나 새로 작성] (http://stackoverflow.com/questions/18766780/stringbuilder-reset-or-create-a-new) – JRR
내 생각이 단호하다 htly 다른 질문 b/c 사용자는 작업 수행의 여러 가지 방법의 성능 영향에 대해 궁금해하는 것과는 반대로 예외를 얻고 있습니다. – WattsInABox