2013-03-24 44 views
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/sgpY2AuG http://pastebin.com/eqXHNk0N < - 忽略行35

+0

你的循環條件是後處理,所以你有錯誤的想法。 – 2013-03-24 15:03:26

+0

請在發佈之前剪下您的代碼以僅顯示相關部分。 – Keppil 2013-03-24 15:06:32

+0

無論爲什麼循環不起作用,如果不知道發生了什麼,您可能想要了解如何使用調試器來解決這類問題。這是非常有益的。 – andi5 2013-03-24 15:07:32

回答

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))=='+')) 

看到de Morgan's law

0

我認爲這個問題是在這裏:
while(((ciag.charAt(iteration))!='-')||((ciag.charAt(iteration))!='+'))

嘗試使用這個:

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

由於您尚未指定確切的問題,我不確定答案。但嘗試檢查。

0
while (A != 1 || A != 2) { 
    //Do Something 
} 

while循環只會結束,如果A == 1 && A == 2,它永遠不會是真的。