伊莉討論區

標題: 問一下這個程式碼為什在jcreator會有錯誤 [打印本頁]

作者: 復仇刺    時間: 2021-1-29 10:12 PM     標題: 問一下這個程式碼為什在jcreator會有錯誤

使用的程式是jc LE 4.50

import java.io.*;
import java.util.*;
//在jcreator會出錯 cmd DOS 指令 notepade++卻不會錯

class test
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] test = new int[5];
        System.out.println("請輸入"+test.length+"個人的分數:");
        for(int i=0; i<test.length; i++){
            String str = br.readLine();
            test = Integer.parseInt(str);
        }
        for(int s=0; s<test.length-1;s++){  //主要是靠這一段進行排序,當s=0時,t=1。
            for(int t=s+1; t<test.length; t++){
                if(test[t] > test){  //假設T>S成立
                    int tmp = test[t];  //把T的值存到tmp
                    test[t] = test;  //把S的值存到T
                    test = tmp;   //把tmp值的值放到S
                }
            }
        }
        for(int j=0; j<test.length; j++){
            System.out.println("第"+(j+1)+"名的分數是"+test[j]+"分。");
        }
    }   
}
--------------------Configuration: <Default>--------------------
請輸入5個人的分數:
20
30
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    at java.base/java.lang.Integer.parseInt(Integer.java:662)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at test.main(test.java:14)

Process completed.




[attach]134245229[/attach]


作者: 復仇刺    時間: 2021-1-31 11:52 PM

本帖最後由 復仇刺 於 2021-2-1 09:53 AM 編輯

改成.trim()一樣dos、notepade++編譯 還是過 但jcreator還是死掉
輸入
10
20
然後就exception Q.Q....
是說只是想知道一下為什編輯器dos notepade都能過就jc不能= ="


先說一下程式碼不是我寫的...只是在爬文尋找自己想寫的東西找到這原碼debug才發現jcreator會不正常= ="
只能先這樣了QAQ....


import java.io.*;
import java.util.*;


class test
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] test = new int[5];
        System.out.println("請輸入"+test.length+"個人的分數:");
        
        for(int i=0; i<test.length; i++){
            String str = br.readLine();
            test = Integer.parseInt(str.trim());
        }
        for(int s=0; s<test.length-1;s++){  //主要是靠這一段進行排序,當s=0時,t=1。
            for(int t=s+1; t<test.length; t++){

                if(test[t] > test){  //假設T>S成立

  int tmp = test[t];  //把T的值存到tmp
                    test[t] = test;  //把S的值存到T
                    test = tmp;   //把tmp值的值放到S
                }
            }
        }
        for(int j=0; j<test.length; j++){
            System.out.println("第"+(j+1)+"名的分數是"+test[j]+"分。");
        }
    }   
}
//為什我的文章上會有刪除線......


作者: 復仇刺    時間: 2021-2-2 12:34 AM

本帖最後由 復仇刺 於 2021-2-3 12:44 AM 編輯
復仇刺 發表於 2021-1-31 11:52 PM
改成.trim()一樣dos、notepade++編譯 還是過 但jcreator還是死掉
輸入
10

還是死掉-.-但看編譯狀態 是有Process completed. ,代表語法跟寫法基本上無誤吧......但為什輸入5個人的成績,就只能到兩個人就跳出了= ="


一樣dos 跟notepade++還是過= =" 輸出也是正確-.-...好吧 可能軟體問題.......Q~Q...(....


參考了
OCPJP 的字串轉數字https://magiclen.org/ocpjp-bufferedreader/



import java.io.*;
import java.util.*;


class test
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] test = new int[5];
        System.out.println("請輸入"+test.length+"個人的分數:");
        
        for(int i=0; i<test.length; i++){
            int str = Integer.parseInt(br.readLine());//字串轉數字
            test = str;
        }
        for(int s=0; s<test.length-1;s++){  //主要是靠這一段進行排序,當s=0時,t=1。
            for(int t=s+1; t<test.length; t++){
                if(test[ t ] > test){  //假設T > S成立
                    int tmp = test[ t ];  //把 T 的值存到tmp
                    te s t[ t ] = test;  //把S的值存到T
                    te st = tmp;   //把tmp值的值放到S
                }
            }
        }
        for(int j=0; j<tes t.length; j++){
            System.out.println("第"+( j+1)+"名的分數是"+test[j]+"分。");
        }
    }   

編譯狀態

--------------------Configuration: <Default>--------------------
請輸入5個人的分數:
10
20
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
    at java.base/java.lang.Integer.parseInt(Integer.java:662)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)
    at test.main(test.java:16)

Process completed
作者: snowflying    時間: 2021-2-2 07:02 PM

[ s ] 和 [ i ] (裡面沒空格) 這是論壇的代碼,變成刪除線和斜體
請使用 [ code ] [/ code] (去掉裡面空格)

我用 Eclipse 跑沒問題
原因應該是 JCreator 處理 readLine() 有問題
Windows 輸入按 Enter 換行的時候,是 '\r' 和 '\n' 兩個字元
其他平台是 '\r' 或是 '\n'

readLine() 這個函式的說明是遇到 '\r'、'\n'、或是 '\r' + '\n'
JCreator 應該是沒使用平台的 '\r' + '\n'
而是 '\r' 和 '\n' 分開認了
所以

20\r\n
30\r\n

輸入這個的時候
一開始的 20\r 被轉成 20
但接下來是 \n,也就是沒數字可以轉,於是就噴出例外




歡迎光臨 伊莉討論區 (http://a405.file-static.com/) Powered by Discuz!