2010-12-20 79 views
1

我昨天問這樣的問題,但我沒有得到關於它的編譯器錯誤:運算符「*」和「+」無法應用於

在下面,爲什麼我不能使用*代碼和+在最後一行很好的答案? ?和最新的方式來解決,多虧

private void bigzarb(int u,int v) 
    { 
     double n; 
     int x=0; 
     int y; 
     int w=0; 
     int z; 
     string[] i = textBox7.Text.Split(','); 
     int[] nums = new int[i.Length]; 
     for (int counter = 0; counter < i.Length; counter++) 
     { 
      nums[counter] = Convert.ToInt32(i[counter]); 
     } 

     u = nums[0]; 
     double firstdigits =Math.Floor(Math.Log10(u) + 1); 
     v = nums[1]; 
     double seconddigits = Math.Floor(Math.Log10(v) + 1); 
     if (firstdigits >= seconddigits) 
     { 
      n = firstdigits; 

     } 
     else 
     { 
      n = seconddigits; 

     } 
     if (u == 0 || v == 0) 
     { 
      MessageBox.Show("the Multiply is 0"); 
     } 
     string threshold = textBox9.Text; 
     int intthreshold = Convert.ToInt32(threshold); 
     int intn = Convert.ToInt32(n); 
     if (intn <= intthreshold) 
     { 

      double uv = u * v; 
      string struv = uv.ToString(); 
      MessageBox.Show(struv); 

     } 
     else 
     { 
      int m =Convert.ToInt32(Math.Floor(n/2)); 

      x = u % 10^m; 
      y = u/10^m; 
      w = v % 10^m; 
      z = v/10^m; 

      bigzarb(x, w) *(10^m) +(bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z);///compiler gives error operator "*"and"+" cannot be applied to operands of type'void'and'int' 

///and compiler gives error operator "*"and"+" cannot be applied to operands of type 'void' and 'void' 
     } 


    } 

回答

1

喬恩斯基特已經回答了這個問題,但我以爲我會更明確的解釋到底是什麼在這條線上發生......

bigzarb(x, w) *(10^m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z); 

讓我們把它分解成部分

第一條語句是

bigzarb(x, w) 

但你會從Jon的回答看 - 你是不是從這個方法返回一個值...

私人無效bigzarb(INT U,int v)按

現在讓我們來替換位與它的實際價值,現在我們已經解釋過:

[void] *(10^m) + (bigzarb(x,w)+bigzarb(w,y))*10^m +bigzarb(y,z); 

這同樣適用於其他所有的呼叫到bigzarb - 讓我們代替那些太...

[void] * (10^m) + ([void] + [void]) * 10^m + [void]; 

所以你的問題是,爲了使用數學運算符,你需要在每邊的數字 - 但你沒有數字,因爲你的方法是無效的。

你可以改變你的方法來返回一個數字 - 但要注意遞歸......當你調用這個方法時,它會自己調用三次,每次調用都會導致對方法的三次調用。不好!

+0

哇,你解釋清楚,現在我應該肯定定義返回?因爲我想在按鈕事件處理程序中使用此代碼,並且我們不能使用return – Arash 2010-12-20 08:05:39

+0

非常感謝,我會詢問有關實現返回的其他問題 – Arash 2010-12-20 08:17:30

5

嗯,有幾件事錯在這裏:

  • 您正在嘗試使用調用方法的結果,但是該方法哈沒有回報價值......所以沒有結果可以相乘。這是編譯器所抱怨的。
  • 我懷疑你認爲^執行「權力」操作 - 它實際上是一個按位xor
  • 你的最後聲明實際上並沒有任何與計算的結果

鑑於您的方法不會返回任何內容,您認爲將在bigzarb(x, w) *(10^m)等表達式中使用哪些值?

+1

^是xor,不是或。 – cdhowie 2010-12-20 07:54:04

+0

@cdhowie:Doh!錯字:)修正,謝謝。 – 2010-12-20 07:54:52

+0

謝謝,我認爲^是權力,什麼是權力的象徵?在bigzarb(x,w)我想用x代替u的值,用w代替v的值,然後乘以10^m,怎麼能我這麼做?謝謝 – Arash 2010-12-20 07:58:45

1

您的方法bigzarb有一個無效簽名,您在計算中使用該簽名。

0

這是因爲功能gzarb(X,W)的

rerturn類型爲void所以你不能做一個空指針的任何操作系。

並且在最後一行中,您正在運行計算中使用gzarb的輸出。

+2

它不是一個「空指針」 - 我認爲帶指針進入圖片會混淆的不僅僅是它的幫助。 – 2010-12-20 07:54:30

+0

刪除空指針參考 – TalentTuner 2010-12-20 07:56:36

+0

它也不是「空指針」。它根本不是*任何*種指針*。 – 2010-12-20 16:07:36

相關問題