蜥蜴 發問時間: 電腦與網際網路程式設計 · 1 0 年前

關於JAVA的程式疑問

程式內容主要是要在外部輸入數字之後出來的東西需要式編排過的由小到大的數字,輸入的皆為數字沒有英文

以下的是小弟的程式

public class E098080 {

public static void main(String[] args){

String[] y = new String();

y = Integer.parseInt(args);

int x = args.length();

System.out.println(x);

String n = new String();

for(int k=0;k<x;k++){

String temp = x[k];

n[k]=Integer.parseInt(temp);

}

for(int i=0;i<x;i++) {

for(int j=0;j<x-i;j++) {

if (n[j] > n[j+1]) {

String temp2 = n[j];

n[j] = n[j+1];

n[j+1] = temp2;

}

}

}

}

}

以下是錯誤資訊

E09808037.java:3: incompatible types

found : java.lang.String

required: java.lang.String[]

String[] y = new String();

^

E09808037.java:4: cannot find symbol

symbol : method parseInt(java.lang.String[])

location: class java.lang.Integer

y = Integer.parseInt(args);

^

E09808037.java:5: cannot find symbol

symbol : method length()

location: class java.lang.String[]

int x = args.length();

^

E09808037.java:10: array required, but int found

String temp = x[k];

^

E09808037.java:11: array required, but java.lang.String found

n[k]=Integer.parseInt(temp);

^

E09808037.java:16: array required, but java.lang.String found

if (n[j] > n[j+1]) {

^

E09808037.java:16: array required, but java.lang.String found

if (n[j] > n[j+1]) {

^

E09808037.java:17: array required, but java.lang.String found

String temp2 = n[j];

^

E09808037.java:18: array required, but java.lang.String found

n[j] = n[j+1];

^

E09808037.java:18: array required, but java.lang.String found

n[j] = n[j+1];

^

E09808037.java:19: array required, but java.lang.String found

n[j+1] = temp2;

^

已更新項目:

胤煌大大您好:

  小弟在這邊先給您置上最高敬意,因為小弟最近才剛開始學JAVA所以很多東西都霧沙沙的,很感謝您不只給小弟指點迷津,還把小弟的錯誤在哪邊都解釋了出來,可以是小弟還是有疑問,那就是在第二個問題的地方

第二個:args是String而你的y一開始也是宣告成String,但你卻用Integer.parseInt

去轉成int,所以這個錯誤是型態錯誤

那我前面是不是直接把

String[] y = new String(); <===這一行刪除

y = Integer.parseInt(args); <===之後把這y的型態改為INT就好了??

2 個已更新項目:

胤煌大大您好:

  順便再問白木的第二個問題,那就是問題四中

x不是宣告成陣列,他本身是int也不能直接丟給String,必須型轉才行

E09808037.java:10: array required, but int found

String temp = x[k];

我直接把String改為int也是不行^_^"

那我該怎麼做呢

3 個已更新項目:

胤煌大大您好:

  我有試著把上面的int x = args.length();更改為String x = args.length();可是照道理來說好像不能這麼改吼@@? 那我該怎麼做呢?

  還有就是我把第一問胤煌大大給的答案把他打上了程式內但是他卻出現了另一問題

E098080371.java:5: cannot find symbol

symbol : variable n

location: class E098080371

n[i] = Integer.parseInt(args[i]);

^

4 個已更新項目:

XD" 那這樣問不對 我應該問說

那第四個:x不是宣告成陣列,他本身是int也不能直接丟給String,必須型轉才行

E09808037.java:10: array required, but int found

String temp = x[k];

這個問題該怎麼辦@@?

5 個已更新項目:

因為我這行...改完之後也還是同樣問題@@" 如下

E098080372.java:12: array required, but int found

int temp = x[k];

^

6 個已更新項目:

我終於懂了T^T

但是卻出現了以下三個問題@@"

E098080372.java:11: operator < cannot be applied to int,int[]

for(int k=0;k

7 個已更新項目:

E098080372.java:11: operator < cannot be applied to int,int[]

for(int k=0;k

8 個已更新項目:

D:\982-EM3A\text\src>javac E098080372.java

E098080372.java:11: operator < cannot be applied to int,int[]

for(int k=0;k

9 個已更新項目:

E098080372.java:11: operator < cannot be applied to int,int[]

for(int k=0;k < x;k++){

E098080372.java:16: operator < cannot be applied to int,int[]

for(int i=0;i < x;i++) {

E098080372.java:17: operator - cannot be applied to int[],int

for(int j=0;j < x-i;j++) {

10 個已更新項目:

喔耶!!!

胤煌大大萬歲(跪拜

終於"康派ㄦ"過了(灑淚

可是我用java E098080372 156468763去執行它之後 它跑出以下訊息耶 @@"

E098080372為檔名 後面是我自己指派給args的數字

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

at E098080372.main(E098080372.java:17)

2 個解答

評分
  • 胤煌
    Lv 5
    1 0 年前
    最佳解答

    先把錯誤訊息解釋後再貼正確程式碼給你

    第一個: 這是陣列宣告錯誤,正確應該是String[] y = new String[];

    E09808037.java:3: incompatible types

    found : java.lang.String

    required: java.lang.String[]

    String[] y = new String();

    ^

    第二個:args是String而你的y一開始也是宣告成String,但你卻用Integer.parseInt

    去轉成int,所以這個錯誤是型態錯誤

    E09808037.java:4: cannot find symbol

    symbol : method parseInt(java.lang.String[])

    location: class java.lang.Integer

    y = Integer.parseInt(args);

    ^

    第三個:String才可以用length(),現在args雖然是String,但同時也是陣列,所以

    必須用陣列方法才行,而陣列的方法很簡單,只要把()去掉變length就行

    E09808037.java:5: cannot find symbol

    symbol : method length()

    location: class java.lang.String[]

    int x = args.length();

    ^

    第四個:x不是宣告成陣列,他本身是int也不能直接丟給String,必須型轉才行

    E09808037.java:10: array required, but int found

    String temp = x[k];

    第五個到最後:都是因為一開始型態宣告錯誤,才無法使用的

    正確程式碼:

    public class Example_args

    {

    public static void main(String[] args)

    {

    int x = args.length;

    System.out.println(x);

    int[] n = new int[args.length];

    for(int k=0;k<x;k++)

    n[k]=Integer.parseInt(args[k]);

    for(int i=0;i<x;i++)

    {

    for(int j=0;j<x-i-1;j++)

    {

    if (n[j] > n[j+1])

    {

    int temp2 = n[j];

    n[j] = n[j+1];

    n[j+1] = temp2;

    }

    }

    }

    for(int i:n)

    System.out.print(i+" ");

    }

    }

    2010-03-25 08:48:32 補充:

    第一問: 不能直接這樣用,args是String陣列的參照,直接用會抓不到他正確值的,

    正確應該要這樣使用

    int[] y = new int[args.length];

    for(int i = 0;i < args.length;i++)

    n[i] = Integer.parseInt(args[i]);

    第二問:我有做解釋了喔,你的x不是宣告成陣列才會造成array required, but int found

    錯誤喔。

    2010-03-25 12:33:08 補充:

    抱歉,第一問有問題,正確是

    int[] y = new int[args.length];

    for(int i = 0;i < args.length;i++)

    y[i] = Integer.parseInt(args[i]);

    .length傳回的值是int,所以可以這樣用喔

    只不過要把括號去掉變

    int x = args.length;

    2010-03-25 14:41:46 補充:

    我有做解釋了....

    你的x不是陣列...

    你要先把x宣告成 int[] x = new int[args.length];

    然後再把temp改成 int temp;

    2010-03-25 16:17:09 補充:

    要得到陣列長度要用.length

    所以正確應該是這樣

    2010-03-25 16:17:26 補充:

    for(int k=0;k < x.length;k++)

    2010-03-25 18:27:22 補充:

    .......

    竟然回答數字達到上限了@@

    我發在意見裡吧

    ArrayIndexOutOfBoundsException,超出陣列範圍

    你把code給我看看吧

  • 1 0 年前

    debug 要自己慢慢來吧,完全讓別人來幫忙 debug 的話

    程式的寫作技巧怎樣也不會進步的.....

    頂多 code 給別人看,讓別人提示錯誤的原因以及錯誤訊息該怎麼看

    但要如何修改應該還是要自己動腦筋去思考.....

還有問題?馬上發問,尋求解答。