Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / missing return statement ? / 8 сообщений из 8, страница 1 из 1
28.11.2005, 13:03
    #33403196
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
Доброе время суток!

Есть код на Java:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
 class  CallMe 
{
   double  sum= 1 ;
   public   synchronized   void  CS( double  m) 
  {
    sum=sum+m;
    System.out.println(" Sum : "+sum+" Member : "+m);
     return ;
  }
}

 class  Caller  implements  Runnable 
{
   double  m,st;
  CallMe target;
   public   double  Factorial( double  k)
  {
     double  g= 1 ;
     if ((k== 0 )||(k== 1 )) return  g;
     else  
    { g=k*Factorial(k- 1 );  return  g;}
  }
  
   public   double  Corr( double  c)
  { 
     double  g1= 0 ;
     if  (c< 0 )   return  g1;
     if  (c>= 0 ) {g1=c;  return  g1;}
  }

   public  Caller(CallMe target,  int  n1)
  {
     this .target=target;
     double  zn= 1 ,st;
     for  ( int  i= 0 ;i<=n1; i+= 4 ) 
    { 
     st=i/ 2 ;  //if (this.m==0.5) this.m=1;
      this .m=zn*Math.pow( 2 ,Corr(st- 1 ))*Math.pow(m,i)/Factorial(st); 
     //if (this.m==0.5) this.m=1;
     zn=-zn; 
    }
     new  Thread( this ).start();
  }
   public   void  run() 
  {
    target.CS( this .m);
  }
}

 class  PPLab2 {
   public   static   void  main(String args[]) 
  {
    CallMe target= new  CallMe();
     new  Caller(target, 0 );
     new  Caller(target, 4 );
     new  Caller(target, 8 );
     new  Caller(target, 12 );
     new  Caller(target, 16 );
     new  Caller(target, 20 );
     new  Caller(target, 24 );
     new  Caller(target, 28 );
  }
}

При попытке скомпилировать файл выдает ошибку, что в заголовке, на открывающуюся скобку после строки
Код: plaintext
 public   double  Corr( double  c)

,хотя практически аналогичная функция подсчета факториала работает.

В чем может быть проблема?



ЗЫ. Исходная задача: ф-ция cos 2 (x 2 )
раскладывается в ряд:

1-1*х 4 +(1/3)*х 8 -(2/45)*х 12 ...=
1-(+/-1)*(2 (i/2-1)i /(i/2)!)

Загвоздка вышла в том, что первый член суммы не подходит данной формуле (по ней он =1/2 (т.к. 2 (i/2-1) =1/2 при i=0) когда должно быть 1). При подсчете обычным способом я этот эелемент выносил за цикл и отдельно добавлял к сумме.

Но в данном случае, при создании параллельных процессов в Java, никак этот элемент вынести из общей суммы не получается. Для этого пытаюсь использовать функцию
Код: plaintext
 public   double  Corr( double  c)
, которая
для первого элемента суммы 2 (0/2-1) превращает в 1.
Возможно, существует другой способ решения данной задачи?
...
Рейтинг: 0 / 0
28.11.2005, 13:08
    #33403214
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
добавь return 0 в конце функции.
...
Рейтинг: 0 / 0
28.11.2005, 13:13
    #33403231
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
твое
Код: plaintext
1.
2.
3.
4.
5.
 public   double  Corr( double  c) { 
   double  g1= 0 ;
   if  (c< 0 )   return  g1;
   if  (c>= 0 ) {g1=c;  return  g1;}
}

иое
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public   double  Corr( double  c) { 
   if  (c <  0 ) {
     return   0 . 0 ;
  }  else  {
     return  c;
  }
}

// или

 public   double  Corr( double  c) { 
   return  (c <  0 ) ?  0 . 0  : c;
}
...
Рейтинг: 0 / 0
28.11.2005, 13:18
    #33403246
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
Ihor
Код: plaintext
1.
2.
3.
4.
5.
6.
public double Corr(double c)
  { 
    double g1= 0 ;
    if (c< 0 )  return g1;
    if (c>= 0 ) {g1=c; return g1;}
  }


надо так:
Код: plaintext
1.
2.
3.
4.
5.
6.
public double Corr(double c)
  { 
    double g1= 0 ;
    if (c< 0 )  return g1;
    else {g1=c; return g1;}
  }

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
28.11.2005, 13:20
    #33403248
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
Спасибо. Проблема с данной функцией решена.
Но вот исходная проблема осталась....
...
Рейтинг: 0 / 0
28.11.2005, 13:41
    #33403320
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
IhorСпасибо. Проблема с данной функцией решена.
Но вот исходная проблема осталась....
надо именно разложить в ряд? чем стандартные ф-ии не подошли?
...
Рейтинг: 0 / 0
28.11.2005, 14:19
    #33403439
Ihor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
Просто задание такое:) Для практики в создании параллельных процессов В Java. Как ни крути, а надо делать.
...
Рейтинг: 0 / 0
28.11.2005, 14:36
    #33403505
А.Грасоff™
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
missing return statement ?
IhorДля практики в создании параллельных процессов В Java. Как ни крути, а надо делать.
самое первое - весь код ты должен делать в run(), а так -
весь твой код ничего общего с правильным распределением
вычислений не имеет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
 package  test.ihor;

 public   class  CallMe {
   private   double  sum =  1 . 0 ;

   public   double  getSum() {
     return  sum;
  }

   public   void  setSum( double  sum) {
     this .sum = sum;
  }

   public   synchronized   void  CS( double  m) {
    sum += m;
    System.out.println("Sum: " + sum + " Member: " + m);
  }

   public   static   void  main(String[] args) {
    CallMe target =  new  CallMe();
     new  Caller(target,  0 );
     new  Caller(target,  4 );
     new  Caller(target,  8 );
     new  Caller(target,  12 );
     new  Caller(target,  16 );
     new  Caller(target,  20 );
     new  Caller(target,  24 );
     new  Caller(target,  28 );
  }
}

 class  Caller  implements  Runnable {
   private  CallMe target;
   double  m;
   int  n1;

   public   double  factorial( double  k) {
     if  ((k ==  0 ) || (k ==  1 )) {
       return   1 ;
    }  else  {
       return  k * factorial(k -  1 );
    }
  }

   public   double  corr( double  c) {
     return  (c <  0 ) ?  0 . 0  : c;
  }

   public  Caller(CallMe target,  int  n1) {
     this .target = target;
     this .n1 = n1;

    // все вычисления вынесены в run()

     new  Thread( this ).start();
  }

   public   void  run() {
     double  zn =  1 , st;
     for  ( int  i =  0 ; i <= n1; i +=  4 ) {
      st = i /  2 ;  //if (this.m==0.5) this.m=1;
      m = zn * Math.pow( 2 , corr(st -  1 )) * Math.pow(m, i) / factorial(st);
      //if (this.m==0.5) this.m=1;
      zn = -zn;
    }

    target.CS(m);
  }
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / missing return statement ? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]