Discussion:
[問題] 初學者的問題
(时间太久无法回复)
2007-01-22 16:05:13 UTC
Permalink
我是一個剛學java的初學者
我目前碰到一個問題
然後完全不知道為什麼

我目前是要讀一個有固定格式的txt檔進來
然後我想要把讀到的東西丟到三個array裡面

可是問題是
假如直接給他一個單值的int
他給丟但是就算我設那個int全域參數
那個int只要拿出去select case就變成沒有define

我想直接存到array裡面他就直接爆炸
我不太明瞭為什麼

如果說的不清楚以下有我的程式碼

while ( found == true )
{
st = fin.readLine();
if ( st == null ) found = false;
int test;
^^^^^^^^^^
if ( found == true )
{
StringTokenizer token = new StringTokenizer(st);
String text;
int s1;
int index = 0;
while (token.hasMoreTokens())
{
text = token.nextToken();
s1 = Integer.parseInt(text);
switch ( index )
{
case 0:
//point[count].x = s1;
這裡我直接存到point他跑起來爆炸
break;

case 1:
//point[count].y = s1;
break;

case 2:
//shapes[count] = s1;
test = s1;
System.out.println("Test = " + test);
這裡他可以println出來
break;

case 3:
//colors[count] = s1;
break;
}
++index;
}
}
count++;
我本來在這裡有想要把test丟到shapes[count]裡面
可是test一拿出來就沒有定義
我曾經到constructor那裡設了一大堆public int xxx
結果也沒有用, 他就是不讓我把裡面的資料搬出來

我不知道怎麼樣才能把裡面的東西弄出來做成array~_~
}

--
當你把你丹田內的空氣加壓到5個大氣壓
從你嘴裡噴出的氣流就可以達到1500m/s
相當於5倍音速

而這......就是嘴炮的奧義

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.83.150
痞子軍團團長
2007-01-22 16:52:05 UTC
Permalink
1. 沒有「爆炸」這種錯誤訊息
請不要只用你習慣的口語來撰寫你的發問文章
誰知道那個錯誤點導致的
到底是電腦爆炸還是你的腦袋爆炸還是 JVM 爛掉
這對應的處理方法都不一樣
(電腦爆炸先去硬體版,腦袋爆炸請先去醫院 XDXD)

也麻煩請你的文章盡量寫的像課文 or 說明書
而不是一堆口語說法(他給丟?)

2. 雖然你節錄了部份的程式碼(導致我不能判定這個為作業文 XD)
但是,這部份的程式碼沒辦法告訴讀者 point[] 是什麼鳥
只能猜得出來 point 是陣列,而且是物件陣列

3. 請先檢查一下你的 point[] 是不是每個 element 是不是都有先 new 過


※ 引述《baelrog (魔)》之銘言:
: 我是一個剛學java的初學者
: 我目前碰到一個問題
: 然後完全不知道為什麼
: 我目前是要讀一個有固定格式的txt檔進來
: 然後我想要把讀到的東西丟到三個array裡面
: 可是問題是
: 假如直接給他一個單值的int
: 他給丟但是就算我設那個int全域參數
: 那個int只要拿出去select case就變成沒有define
: 我想直接存到array裡面他就直接爆炸
: 我不太明瞭為什麼

--
 侃侃長論鮮窒礙  網站:http://www.psmonkey.idv.tw
 眾目睽睽無心顫  個人版:telnet://legend.twbbs.org
 煢居少聊常人事 
 殺頭容易告白難  歡迎參觀 Java 版(@ptt.cc)精華區 \囧/

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.197.241
2007-01-23 03:50:08 UTC
Permalink
※ 引述《PsMonkey (痞子軍團團長)》之銘言:
: 1. 沒有「爆炸」這種錯誤訊息
: 請不要只用你習慣的口語來撰寫你的發問文章
: 誰知道那個錯誤點導致的
: 到底是電腦爆炸還是你的腦袋爆炸還是 JVM 爛掉
: 這對應的處理方法都不一樣
: (電腦爆炸先去硬體版,腦袋爆炸請先去醫院 XDXD)
呃......不好意思
那我試圖盡量想辦法把他說清楚
我的表達能力一向不是很好

: 也麻煩請你的文章盡量寫的像課文 or 說明書
: 而不是一堆口語說法(他給丟?)
首先我這是一個小畫家程式的讀檔功能
以下是獨立的一個class的一部分
我是用下載的Jbuilder去做的

我先用我的小畫家隨便畫了一點東西
以txt檔的型式把他存到桌面上
然後試圖用我的讀檔功能把他打開

用run去跑, open檔案的時候
會出現一大排錯誤訊息
at javax.swing.AbstractButton.fireActionPerformed(Abstr
actButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(A
bstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(D
efaultButtonModel.java:420)

總共大概五十幾行, 然後我也看不懂這些是什麼東西



用debug去跑
他說我Hit uncaught exception java.lang.NullPointerException


: 2. 雖然你節錄了部份的程式碼(導致我不能判定這個為作業文 XD)
: 但是,這部份的程式碼沒辦法告訴讀者 point[] 是什麼鳥
: 只能猜得出來 point 是陣列,而且是物件陣列
我的point[], shapes, colors[]是import java.awt.*後
private Point [] point;
private int [] shapes;
private int [] colors;
是直接在我讀檔獨立出來做的那個class裡宣告的矩陣


: 3. 請先檢查一下你的 point[] 是不是每個 element 是不是都有先 new 過
: ※ 引述《baelrog (魔)》之銘言:
: : 我是一個剛學java的初學者
: : 我目前碰到一個問題
: : 然後完全不知道為什麼
: : 我目前是要讀一個有固定格式的txt檔進來
: : 然後我想要把讀到的東西丟到三個array裡面
: : 可是問題是
: : 假如直接給他一個單值的int
: : 他給丟但是就算我設那個int全域參數
: : 那個int只要拿出去select case就變成沒有define
: : 我想直接存到array裡面他就直接爆炸
: : 我不太明瞭為什麼
於是我設立了一個叫做test的單值int
用test代替剛剛幾個矩陣
case 2:
//shapes[count] = s1; 這行暫時封印了
test = s1;
System.out.println("Test = " + test);
break;

然後跑起來就不會碰一聲炸出五十幾行錯誤碼了



我想知道的比較偏向結構的一些觀念
為什麼我放矩陣就不能使用放單值的int就可以

--
當你把你丹田內的空氣加壓到5個大氣壓
從你嘴裡噴出的氣流就可以達到1500m/s
相當於5倍音速

而這......就是嘴炮的奧義

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.70.98.242
[瑤]拚了~
2007-01-23 06:50:15 UTC
Permalink
: 他說我Hit uncaught exception java.lang.NullPointerException
^^^^^^^^^^^^^^^^^^^^^

陣列宣告只是分配指標罷了,並未實體化,
所以,在陣列宣告後,要用建構元產生實體

有沒有 new 拉? ....

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.152.55
2007-01-23 08:17:04 UTC
Permalink
※ 引述《gauyew ([瑤]拚了~)》之銘言:
: : 他說我Hit uncaught exception java.lang.NullPointerException
: ^^^^^^^^^^^^^^^^^^^^^
: 陣列宣告只是分配指標罷了,並未實體化,
: 所以,在陣列宣告後,要用建構元產生實體
: 有沒有 new 拉? ....
加了幾個new之後小畫家神奇的完成了orz
實在很感謝

前面有人po過類似的了
不過我還是想問, 因為我有看沒有懂

例如我
int test;
和int test = new int;
這兩種宣告法一個有new一個沒有new
但是差別到底在哪裡

而且就實際使用上來看
兩種得到的結果好像差不多
因為在我原本的小畫家裡沒有用new的int參數一樣可以用

陣列宣告後不會產生實體
那int宣告之後就會@@?

整體的結構不是很清楚

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.70.98.242
小安
2007-01-23 08:25:39 UTC
Permalink
※ 引述《baelrog (魔)》之銘言:
: int test;
: 和int test = new int;
: 這兩種宣告法一個有new一個沒有new
: 但是差別到底在哪裡
: 而且就實際使用上來看
: 兩種得到的結果好像差不多
: 因為在我原本的小畫家裡沒有用new的int參數一樣可以用
: 陣列宣告後不會產生實體
: 那int宣告之後就會@@?
: 整體的結構不是很清楚

Java 中有的資料型態可分為兩類: primitive type & object

primitive type 即 int, char, double...等等 (不包含陣列!)

object 則是 Object, String, 陣列


int test; 基本上要看是否為 local-variable,
若是為 static or instance variable 則會自動給予初值

至於你說的 int test = new int; 其實並沒有這種用法,
你說的應該是宣告陣列
而在陣列上,primitive or object 又會造成不同的結果
建議你針對這些部份再多查詢看看

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.58.66.81
[瑤]拚了~
2007-01-23 08:36:39 UTC
Permalink
: int test;
: 和int test = new int;
^^^^^^^^^^^^^^^^^^^^^^
你說的是Integer test = Integer(10); 吧!

: 這兩種宣告法一個有new一個沒有new
: 但是差別到底在哪裡
: 而且就實際使用上來看
: 兩種得到的結果好像差不多
: 因為在我原本的小畫家裡沒有用new的int參數一樣可以用
: 陣列宣告後不會產生實體
: 那int宣告之後就會@@?
: 整體的結構不是很清楚

厄~~很難說明耶...

你把以下的程式範弄懂...或許你會明白...

Integer a1 = new Integer(10);
Integer a2 = new Integer(10);
System.out.print(a1==a2);
System.out.println(" "+a1+","+a2);
a1 = 100;
a2 = 100;
System.out.print(a1==a2);
System.out.println(" "+a1+","+a2);
a1 = 200;
a2 = 200;
System.out.print(a1==a2);
System.out.println(" "+a1+","+a2);

一言難盡...

(答案是:)

false 10,10
true 100,100
false 200,200

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.225.152.55
※ 編輯: gauyew 來自: 125.225.152.55 (01/23 16:36)
用功點吧!
2007-01-23 08:39:44 UTC
Permalink
※ 引述《baelrog (魔)》之銘言:
: ※ 引述《gauyew ([瑤]拚了~)》之銘言:
: : ^^^^^^^^^^^^^^^^^^^^^
: : 陣列宣告只是分配指標罷了,並未實體化,
: : 所以,在陣列宣告後,要用建構元產生實體
: : 有沒有 new 拉? ....
: 和int test = new int;
: 這兩種宣告法一個有new一個沒有new
: 但是差別到底在哪裡
: 而且就實際使用上來看
: 兩種得到的結果好像差不多
: 因為在我原本的小畫家裡沒有用new的int參數一樣可以用
: 陣列宣告後不會產生實體
: 那int宣告之後就會@@?
: 整體的結構不是很清楚

int 是 primitive variable,不用去 new 他
int[] 是陣列,陣列是物件的一種,而物件的產生要用 new,屬於 reference variable

int a = 5; // a就是5

java裡面小寫的都是 primitive variable,變數直接代表 值

其他都是 reference variable,變數代表物件的參考(就像遙控器),你可以透過

參考(遙控器)去控制物件,但遙控器並不是物件本身。


而 int a = new int[3] ;

// a 是一個陣列,所以要用 new 產生一個 reference。(陳列是物件)
// 而陣列中的元素裝的是 int (primitive variable)

a[0]=1; //a陣列的第0個元素是primitive var,所以不用 new
.....


特例:

String str = "abc" ;

他也不用 new 就可以用,但 String 卻是個物件,why ?

因為設計java的人讓我們偷懶可以少打點字,所以那一行在 compile 的時候會被自動

轉換成

String str = new String("abc");

有錯請指正^^

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.138.148.68
愚人
2007-01-23 08:49:16 UTC
Permalink
※ 引述《gauyew ([瑤]拚了~)》之銘言:
: 厄~~很難說明耶...
: 你把以下的程式範例弄懂...或許你會明白...
: Integer a1 = new Integer(10);
: Integer a2 = new Integer(10);
: System.out.print(a1==a2);
: System.out.println(" "+a1+","+a2);
: a1 = 100;
: a2 = 100;
: System.out.print(a1==a2);
: System.out.println(" "+a1+","+a2);
: a1 = 200;
: a2 = 200;
: System.out.print(a1==a2);
: System.out.println(" "+a1+","+a2);
: 一言難盡...
: (答案是:)
: false 10,10
: true 100,100
: false 200,200

沒有一言難盡啊

4561 m 1/21 qrtt1 R: [問題] 初學者的幾點小疑問

參考一下弟找到的資料,蠻多人七嘴八舌的討論者呢 :)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.20
愚人
2007-01-23 08:55:31 UTC
Permalink
※ 引述《Nt1 (用功點吧!)》之銘言:
: 特例:
: String str = "abc" ;
: 他也不用 new 就可以用,但 String 卻是個物件,why ?
: 因為設計java的人讓我們偷懶可以少打點字,所以那一行在 compile 的時候會被自動
: 轉換成
: String str = new String("abc");
: 有錯請指正^^

呵,還差一點就正確了
String assign operator 會把 String 放進 String Pool 之中。
不會等於 new String("abc") ----> 這個在 heap 之中。

public class StringPoolTEst {

public static void main(String[] args){
String a ="string in pool";
String b ="string in pool";

System.out.println("a==b: "+ (a==b));
System.out.println("a equals to b: "+a.equals(b));

String c = new String("string in pool");
System.out.println("a==c :" + (a==c));
System.out.println("a equals to c: "+a.equals(c));
}

}

a==b: true
a equals to b: true
a==c :false
a equals to c: true

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.26.34.20

Loading...