2017-06-27 9 views
-1

文字列内の文字を1つ1つ比較して無限ループにならないようにするには、どのステートメントを使用しますか。 C/C++で文字配列を比較するようなものです。文字列内の文字を比較する際の無限ループ

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

class Calcc extends JFrame implements ActionListener { 

    String l = "b"; 
    int z = 0; 
    JFrame f; 
    JTextField t1 = new JTextField(30); 
    JTextField t2 = new JTextField(10); 
    JButton b1 = new JButton("1"); 
    JButton b2 = new JButton("2"); 
    JButton b3 = new JButton("3"); 
    JButton b4 = new JButton("4"); 
    JButton b5 = new JButton("5"); 
    JButton b6 = new JButton("6"); 
    JButton b7 = new JButton("7"); 
    JButton b8 = new JButton("8"); 
    JButton b9 = new JButton("9"); 
    JButton b10 = new JButton("0"); 
    JButton b11 = new JButton("+"); 
    JButton b12 = new JButton("-"); 
    JButton b13 = new JButton("*"); 
    JButton b14 = new JButton("/"); 
    JButton b15 = new JButton("="); 

    Calcc() { 
     f = new JFrame(); 
     f.add(t1); 
     f.add(t2); 
     f.add(b1); 
     f.add(b2); 
     f.add(b3); 
     f.add(b4); 
     f.add(b5); 
     f.add(b6); 
     f.add(b7); 
     f.add(b8); 
     f.add(b9); 
     f.add(b10); 
     f.add(b11); 
     f.add(b12); 
     f.add(b13); 
     f.add(b14); 
     f.add(b15); 
     b1.addActionListener(this); 
     b2.addActionListener(this); 
     b3.addActionListener(this); 
     b4.addActionListener(this); 
     b5.addActionListener(this); 
     b6.addActionListener(this); 
     b7.addActionListener(this); 
     b8.addActionListener(this); 
     b9.addActionListener(this); 
     b10.addActionListener(this); 
     b11.addActionListener(this); 
     b12.addActionListener(this); 
     b13.addActionListener(this); 
     b14.addActionListener(this); 
     b15.addActionListener(this); 
     f.setVisible(true); 
     f.setSize(350, 350); 
     f.setLayout(new FlowLayout()); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void actionPerformed(ActionEvent e) { 

     String d; 
     d = t1.getText(); 
     if (e.getSource() == b1) { 
      t1.setText(d + "1"); 
     } 
     if (e.getSource() == b2) { 
      t1.setText(d + "2"); 
     } 
     if (e.getSource() == b3) { 
      t1.setText(d + "3"); 
     } 
     if (e.getSource() == b4) { 
      t1.setText(d + "4"); 
     } 
     if (e.getSource() == b5) { 
      t1.setText(d + "5"); 
     } 
     if (e.getSource() == b6) { 
      t1.setText(d + "6"); 
     } 
     if (e.getSource() == b7) { 
      t1.setText(d + "7"); 
     } 
     if (e.getSource() == b8) { 
      t1.setText(d + "8"); 
     } 
     if (e.getSource() == b9) { 
      t1.setText(d + "9"); 
     } 
     if (e.getSource() == b10) { 
      t1.setText(d + "0"); 
     } 
     if (e.getSource() == b11) { 
      t1.setText(d + "+"); 
     } 
     if (e.getSource() == b12) { 
      t1.setText(d + "-"); 
     } 
     if (e.getSource() == b13) { 
      t1.setText(d + "*"); 
     } 
     if (e.getSource() == b14) { 
      t1.setText(d + "/"); 
     } 
     if (e.getSource() == b15) { 
      while (l != "a") { 
       int b = calcA(d); 
       if (l == "+") 
        z = z + b; 
       else if (l == "-") 
        z = z - b; 
       else if (l == "*") 
        z = z * b; 
       else if (l == "*") 
        z = z * b; 
      } 
      t2.setText(String.valueOf(z)); 
     } 

    } 

    int calcA(String d1) { 

     l = "a"; 
     int k = 0; 
     while ((d1 != "+") && (d1 != "-") && (d1 != "*") && (d1 != "/")) { 
      if (d1 != "\n") 
       break; 
      k = k * 10 + Integer.valueOf(d1); 
     } 
     l = d1; 
     return k; 
    } 
} 

public class CalcD { 

    public static void main(String[] args) { 
     new Calcc(); 
    } 

} 

答えて

1

C/C++のように任意の文字で確認する必要はありません。 Stringの長さで単純に反復する必要があります。単にあなたのループ内でこれを使用する:あなたはJavaで平等のための文字列を比較するとき、言っ

for (int i=0;i<string.length();i++) { 
    char c = string.charAt(i); 
    // do whatever with your character. 
} 

、あなたが代わりに常に==String.equalsメソッドを使用する必要があります。

だから、あなたは

getSource().equals(b1) 

getSource() == b1 

からあなたのコードを変更する必要があり、この情報がお役に立てば幸い!

+0

確かにあなたに通知します...ありがとうMr.Anacron – EzhilKumaran

+0

Sir実際に文字が文字列内に見つかるまでループを実行します私は特定のcharecterのインデックスを望んでいません – EzhilKumaran

+0

入力が次のようになっているからです: – EzhilKumaran

1

あなたは==を使用して文字列をたくさん比較しているように見えますが、それは悪い習慣です。

これは文字列がオブジェクトであり、==演算子を使用して比較すると、値に関係なくそれらがまったく同じオブジェクトであるかどうかがチェックされます。ストリングは特殊なケースです。ストリングを作成する場合、jvmは既存のオブジェクトを使用するか新しいオブジェクトを作成するかを決定するため、 "=="がtrueを返すかどうかを100%保証することはできません同じ値。

文字列を比較するには、string1.equals(string2)を使用してください。

オブジェクトの値を比較するには.equalsメソッドを使用し、プリミティブを比較するには==演算子を使用する必要があります。

+0

私のコードが間違っています....実際に私は文字列のすべての文字を与えられた文字と比較したいのですが、MartinByersさんにお返事いただきありがとうございます – EzhilKumaran

+0

==演算子を使って文字を比較することができます。文字列にtoCharArray()メソッドがあることを認識していなかった場合は、それはあなたを助けるかもしれません。 – MartinByers

0

いくつかの疑問を明確にしてくれてありがとうございました。上記のプログラムのために 私はString.charAt(int);を使用しました。 ループ内のすべての特定の文字を比較する....