我最近才开始学java 我要编的
这个程序是要求cosx=x^1/2中x的值
为什么我的程序是死循环~~~~
到底错在哪了~~\
public class ValueCosX { /** 
 * @param args 
 */ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
 double tempX,tempY; 
 double tempR=((Math.PI)/2); 
 double tempL=0; 
 double valueX; 
 boolean temP=true; 
 while(temP&&tempL<tempR) 
 { 
  valueX=((tempR-tempL)/2); 
  //System.out.println(valueX); 
  tempX=Math.sqrt(valueX); 
  //System.out.println(tempX); 
  tempY=Math.cos(valueX); 
  //System.out.println(tempY); 
  if(tempX<tempY-1e-10) 
  { 
  tempL=valueX; 
  System.out.println(tempL); 
  } 
  else if(tempX>tempY-1e-10) 
  { 
  tempR=valueX; 
  System.out.println(tempR); 
  } 
  else 
  { 
  
  System.out.println(valueX); 
  temP=false; 
  } 
 } 
} } 
谢谢~~~ 

解决方案 »

  1.   

    temP&&tempL <tempR这个可能为假么
      

  2.   

    你的tempL 永远大于 tempR
    退出的条件不成立!建议用下面的形式写类似代码!int loop = 10000; 
    while (....&& 0 < loop--){
        ....
    }
      

  3.   

    死循环应该就是while条件出问题了。
      

  4.   

    因为 (tempX < tempY - 1e-10) 始终成立,所以temP始终是true,tempL < tempR也成立
      

  5.   

    我的前两次回答请无视!!把while中的第一行请改成:
    valueX = tempL + ((tempR - tempL) / 2);
    原因自己想吧!很简单的!