Discussion:
[問題]想請問一個關於傳值呼叫的問題
(时间太久无法回复)
壞人嗎>"<
2006-10-20 04:28:52 UTC
Permalink
目前正在寫一個JAVA的程式,是有關於讓使用者輸入兩個圓半徑,然後再使用
兩個class,一個負責算圓面積,另一個負責算兩圓相減的環面積,然後再用
main function去得到兩個由使用者輸入的半徑並且得到環面積。
我的寫法如下:
問題是編譯的結果它說得不到使用者輸入的兩個值,關於傳值呼叫和參考呼叫,小妹搞不
太清楚,希望各位大大能幫小妹修改

import java.text.*;
import javax.swing.*;

class Circle{ //計算圓面積的類別
int r;
public double area(int r)
{
this.r=r;
return r*r*Math.PI;
}
}

class Donut{ //計算環形面積的類別
public double donutCircle()
{
int r;
Circle big=new Circle();
Circle small=new Circle();
double resulat=big.area(int r)-small.area(int r);
this.r=r;
return resulat;
}
}

class CalculateCircle{
public static void main(String[] args){
String input1=JOptionPane.showInputDialog("請輸入第一個圓半徑: ");
String input2=JOptionPane.showInputDialog("請輸入第二個圓半徑: ");
int r1=Integer.parseInt(input1); //將輸入的數轉成整數
int r2=Integer.parseInt(input2);

Donut d=new Donut();
Circle.big.area(r1);
Circle.small.area(r2);
JOptionPane.showMessageDialog(null,"所算出的結果為:
"+d.donutCircle());
}
}

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.31.27
z***@ptt.cc
2006-10-20 05:50:01 UTC
Permalink
※ 引述《FAVORITGREEN (壞人嗎>"<)》之銘言:
: 目前正在寫一個JAVA的程式,是有關於讓使用者輸入兩個圓半徑,然後再使用
: 兩個class,一個負責算圓面積,另一個負責算兩圓相減的環面積,然後再用
: main function去得到兩個由使用者輸入的半徑並且得到環面積。
: 我的寫法如下:
: 問題是編譯的結果它說得不到使用者輸入的兩個值,關於傳值呼叫和參考呼叫,小妹搞不
: 太清楚,希望各位大大能幫小妹修改


: import java.text.*;
: import javax.swing.*;
: class Circle{ //計算圓面積的類別
: int r;
: public double area(int r)
: {
: this.r=r;
: return r*r*Math.PI;
: }
: }
從main function的作法,是想把值傳入方法中計算並回傳,就不必另外設類別變數了
: class Donut{ //計算環形面積的類別
: public double donutCircle()
: {
: int r;
: Circle big=new Circle();
: Circle small=new Circle();
: double resulat=big.area(int r)-small.area(int r);
: this.r=r;
: return resulat;
: }
: }
上面這個class,既然方法要有傳入值,自然得有讓它能傳入的位置。
另外將值傳入方法裡,並不需要連變數型態都打。
另外似乎是邏輯錯誤,或是對this的觀念錯誤,
並不是this.r,他就會猜到你要用main function裡的r1或是r2。
也不是說把值傳到class Circle,傳入的值就一直存在那,想要就可以叫的到。
想要能一次做出來,就得傳兩個不同的東西進來。
如果可以順便判斷一下大小就更好了。
: class CalculateCircle{
: public static void main(String[] args){
: String input1=JOptionPane.showInputDialog("請輸入第一個圓半徑: ");
: String input2=JOptionPane.showInputDialog("請輸入第二個圓半徑: ");
: int r1=Integer.parseInt(input1); //將輸入的數轉成整數
: int r2=Integer.parseInt(input2);
: Donut d=new Donut();
: Circle.big.area(r1);
: Circle.small.area(r2);
: JOptionPane.showMessageDialog(null,"所算出的結果為:
: "+d.donutCircle());
: }
: }
Circle.big.area(r1)?????是想將r1,r2傳入嗎?
想把r1,r2傳進去應該是用 物件.方法(傳入值);
而且傳入的地方也錯了,應該是要傳到另一個的類別才是。

我覺得你不熟悉的是變數存在的範圍,以及傳入值的方法。
建議找書把這方面弄懂。

--
The race is not to the swift or the battle to the strong, nor does food come
to wise or wealth to the brilliant or favor to the learned:
but time and chance happen to them all.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.174.223.134
※ 編輯: zu 來自: 218.174.223.134 (10/20 21:50)
壞人嗎>"<
2006-10-20 06:36:12 UTC
Permalink
※ 引述《zu ( )》之銘言:
: ※ 引述《FAVORITGREEN (壞人嗎>"<)》之銘言:
: : 目前正在寫一個JAVA的程式,是有關於讓使用者輸入兩個圓半徑,然後再使用
: : 兩個class,一個負責算圓面積,另一個負責算兩圓相減的環面積,然後再用
: : main function去得到兩個由使用者輸入的半徑並且得到環面積。
: : 我的寫法如下:
: : 問題是編譯的結果它說得不到使用者輸入的兩個值,關於傳值呼叫和參考呼叫,小妹搞不
: : 太清楚,希望各位大大能幫小妹修改
: : import java.text.*;
: : import javax.swing.*;
: : class Circle{ //計算圓面積的類別
: : int r;
: : public double area(int r)
: : {
: : this.r=r;
: : return r*r*Math.PI;
: : }
: : }
: 從main function的作法,是想把值傳入方法中計算並回傳,就不必另外設類別變數了
: : class Donut{ //計算環形面積的類別
: : public double donutCircle()
: : {
: : int r;
: : Circle big=new Circle();
: : Circle small=new Circle();
: : double resulat=big.area(int r)-small.area(int r);
: : this.r=r;
: : return resulat;
: : }
: : }
: 上面這個class,既然方法要有傳入值,自然得有讓它能傳入的位置。
: 另外將值傳入方法裡,並不需要連變數型態都打。
: 另外似乎是邏輯錯誤,或是對this的觀念錯誤,
: 並不是this.r,他就會猜到你要用main function裡的r1或是r2。
: 也不是說把值傳到class Circle,傳入的值就一直存在那,想要就可以叫的到。
: 想要能一次做出來,就得傳兩個不同的東西進來。
: 如果可以順便判斷一下大小就更好了。
: : class CalculateCircle{
: : public static void main(String[] args){
: : String input1=JOptionPane.showInputDialog("請輸入第一個圓半徑: ");
: : String input2=JOptionPane.showInputDialog("請輸入第二個圓半徑: ");
: : int r1=Integer.parseInt(input1); //將輸入的數轉成整數
: : int r2=Integer.parseInt(input2);
: : Donut d=new Donut();
: : Circle.big.area(r1);
: : Circle.small.area(r2);
: : JOptionPane.showMessageDialog(null,"所算出的結果為:
: : "+d.donutCircle());
: : }
: : }
: Circle.big.area(r1)?????是想將r1,r2傳入嗎?
: 想把r1,r2傳進去應該是用 物件.方法(傳入值);
: 而且傳入的地方也錯了,應該是要傳到另一個的類別才是。
: 程式並不是從上往下run的,會先讀你的main function,
: 當有做到類別的方法或是物件,才會去run那個類別,
: 你想把r1,r2傳入circle的類別方法,先忽略你使用的方法正不正確,
: 當值傳入後,它會依照你的方法把計算過後的東西回傳,
: JVM就會把存值的這塊記憶體garbage了。
: 而不是在做d.donutCircle()時,
: 因為類別裡有用到circle類別的方法,就會去讀剛剛傳入的值,
: 這時候的值已經不存在了,自然系統就會告訴你得不到值。
: 我覺得你不熟悉的是變數存在的範圍,以及傳入值的方法,甚至是程式執行的順序。
: 建議找書把這方面弄懂。

感謝這位大大的提醒,我想我知道哪裡該修改及補強了
以下是我修改過後的結果,請這位大大在幫我看看哪裡須再補強!!!謝謝^^
import java.text.*;
import javax.swing.*;

class Circle{
public double area(int r)
{

return r*r*Math.PI;
}
}

class Donut{
private int x,y;
public void setRadii(int r1,int r2)
{
x=r1;
y=r2;
}
public double calculateDonut()
{
Circle big=new Circle();
Circle small=new Circle();
if(x>y)
{
return big.area(x)-small.area(y);
}
else
{
return small.area(y)-big.area(x);
}
}

}

class CalculateCircle{
public static void main(String[] args){
String input1=JOptionPane.showInputDialog("請輸入第一個圓半徑: ");
String input2=JOptionPane.showInputDialog("請輸入第二個圓半徑: ");
int r1=Integer.parseInt(input1); //將輸入的數轉成整數
int r2=Integer.parseInt(input2);

Donut d=new Donut();
d.setRadii(r1,r2);

JOptionPane.showMessageDialog(null,"所算出的結果為: "+d.calculateDonut());
}
}

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.31.27
z***@ptt.cc
2006-10-20 07:04:49 UTC
Permalink
※ 引述《FAVORITGREEN (壞人嗎>"<)》之銘言:
: import java.text.*;
: import javax.swing.*;
: class Circle{
: public double area(int r)
: {
: return r*r*Math.PI;
: }
: }
: class Donut{

// private int x,y;
// public void setRadii(int r1,int r2)
// {
// x=r1;
// y=r2;
// }
// public double calculateDonut()

public double calculateDonut(int x,int y)
: {
: Circle big=new Circle();
: Circle small=new Circle();
: if(x>y)
: {
: return big.area(x)-small.area(y);
: }
: else
: {
: return small.area(y)-big.area(x);
: }
: }
: }
: class CalculateCircle{
: public static void main(String[] args){
: String input1=JOptionPane.showInputDialog("請輸入第一個圓半徑: ");
: String input2=JOptionPane.showInputDialog("請輸入第二個圓半徑: ");
: int r1=Integer.parseInt(input1); //將輸入的數轉成整數
: int r2=Integer.parseInt(input2);
: Donut d=new Donut();
// d.setRadii(r1,r2);
// JOptionPane.showMessageDialog(null,"所算出的結果為: "+d.calculateDonut());
我沒有實際去測試,光這樣看,你的作法應該還是會讀不到值?
你傳入的值,應該活不到你呼叫calculateDonut的時候。
JOptionPane.showMessageDialog(null,"所算出的結果為: "+d.calculateDonut(r1,r2));
: }
: }
寫法因人而異,我比較習慣這樣的作法。

--
The race is not to the swift or the battle to the strong, nor does food come
to wise or wealth to the brilliant or favor to the learned:
but time and chance happen to them all.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.174.223.134
※ 編輯: zu 來自: 218.174.223.134 (10/20 23:04)
继续阅读narkive:
Loading...