0

これが私のコードで、条件をチェックしていませんが、if条件は機能しています。それはすべて私には大丈夫だと思われるので、私は一体何が起こっているのか少しもわかりません。

import java.lang.Integer;

public class Wielomian
{
        public double [] mnozniki;
        public int max;


        Wielomian(String ciag)
        {
         int tmp;

         int stopien;

         //int iteration=0;
         int poczatek=0;

         tmp=ciag.indexOf('^');
         stopien=Integer.valueOf(ciag.substring(tmp+1,tmp+2));
         mnozniki = new double[stopien+1];
         max = stopien;
         tmp=0;
                for(int i=1; i< ciag.length() ; ++i)// +1.0*x^3-1.0*x^1-2.0
                {
                        //System.out.println("some:"+i);
                        if(ciag.charAt(i)=='*')
                        {
                        //      System.out.println("some:k");
                                stopien=Integer.valueOf(ciag.substring(i+3,i+4));

                                int iteration=i;

                                while(((ciag.charAt(iteration))!='-')||((ciag.charAt(iteration))!='+'))
                                {
                                       // System.out.println("some2:"+iteration);
                                        --iteration;
                                        if (iteration<=0) break;
                                }
                                 poczatek=iteration;
                   mnozniki[stopien]=Double.parseDouble(ciag.substring(poczatek,i-1));

                        }


                }
        }

        public void wypisz()
        {
                int i;
                for(i=0;i<max;++i)
                {

                 System.out.println("x^" + i+":"+mnozniki[i]);
                }
        }

そしてメインクラス:

    public class lab03
    {
            public static void main(String args[])
            {

                   String n ="1.0*x^3-1.0*x^1-2.0";
                   Wielomian wx = new Wielomian(n);


                   wx.wypisz();


            }
    }

ペーストビンの場合:http://pastebin.com/sgpY2AuGhttp: //pastebin.com/eqXHNk0N < -行35を無視します

4

3 に答える 3

1
((ciag.charAt(iteration))!='-')||((ciag.charAt(iteration))!='+'))

これは常に真実です。これは古典的な間違いです(「xまたはyではない」は実際には「(xまたはy)ではない」を意味しますが、ほとんどの初心者は「(xではない)または(yではない)」とコード化するため、&&を使用します。代わりに、または否定をORの外に置きます

((ciag.charAt(iteration))!='-')&&((ciag.charAt(iteration))!='+'))

また

!((ciag.charAt(iteration))=='-')||((ciag.charAt(iteration))=='+'))

ド・モルガンの法則を参照

于 2013-03-24T15:07:11.513 に答える
0

問題はここにあると思います:
while(((ciag.charAt(iteration))!='-')||((ciag.charAt(iteration))!='+'))

代わりにこれを使用してみてください:

while(((ciag.charAt(iteration))!='-')&&((ciag.charAt(iteration))!='+'))

正確な問題を特定していないので、答えはわかりません。しかし、試して確認してください。

于 2013-03-24T15:11:17.847 に答える
0
while ( A != 1 || A != 2) {
    //Do Something 
}

whileループは、がの場合にのみ終了しA == 1 && A == 2ます。これは決して真になることはありません。

于 2013-03-24T15:11:24.473 に答える