#3995: 這題java測資問題???


welkin001 (無盡的蒼穹(持續更新中~水題集中帖))

學校 : 國立臺中技術學院
編號 : 12344
來源 : [111.252.125.191]
最後登入時間 :
2012-10-27 14:59:49
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [114.46.140.219] | 發表日期 : 2010-07-16 05:29

這題java來寫是不是有bug??

用雙hasNext()一職過不暸(

還是解題系統使用的jdk太舊?(家裡jdk1.6

 

 import java.util.*;
public class Basic_d098{
    public static void main(String args[]){
        Scanner sn = new Scanner(System.in);
        while(sn.hasNext()){
            int sum = 0;
            sn = new Scanner(sn.nextLine()).useDelimiter("[^0-9]+");
                while(sn.hasNext())
                    sum += sn.nextInt();
            System.out.println(sum);
            sn = new Scanner(System.in);
        }
    }
}

 
#3996: Re:這題java測資問題???


welkin001 (無盡的蒼穹(持續更新中~水題集中帖))

學校 : 國立臺中技術學院
編號 : 12344
來源 : [111.252.125.191]
最後登入時間 :
2012-10-27 14:59:49
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [114.46.140.219] | 發表日期 : 2010-07-16 05:59

這題java來寫是不是有bug??

用雙hasNext()一職過不暸(

還是解題系統使用的jdk太舊?(家裡jdk1.6

 

 import java.util.*;
public class Basic_d098{
    public static void main(String args[]){
        Scanner sn = new Scanner(System.in);
        while(sn.hasNext()){
            int sum = 0;
            sn = new Scanner(sn.nextLine()).useDelimiter("[^0-9]+");
                while(sn.hasNext())
                    sum += sn.nextInt();
            System.out.println(sum);
            sn = new Scanner(System.in);
        }
    }
}

再來發我另外一種寫法好了(假設Scanner不能這樣用
結果出現這樣的錯誤訊息:

執行時發生錯誤(code:1)!!
Exception in thread "main" java.lang.NumberFormatException: For input string: "99999999999999999999999999999999999999999999"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Long.parseLong(Long.java:415)
    at java.lang.Long.parseLong(Long.java:461)
    at code_526008.main(code_526008.java:11)
看到這我暈了...OTZ

有人用類似寫法的可以說明解答一下是什麼問題嗎??

謝謝

import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Basic_d098{
    public static void main(String args[]){
        Scanner sn = new Scanner(System.in);
        while(sn.hasNext()){
            long sum = 0;
            Matcher m=Pattern.compile("[0-9]+").matcher(sn.nextLine());
            while(m.find()){
                   sum += Long.parseLong(m.group());
            }
            System.out.println(sum);
        }
    }
}
 

 
#3997: Re:這題java測資問題???


example (學姊)

學校 : 臺北市立麗山高級中學
編號 : 6634
來源 : [60.250.138.144]
最後登入時間 :
2022-08-09 17:07:42
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [118.166.112.238] | 發表日期 : 2010-07-16 17:08

這題java來寫是不是有bug??

用雙hasNext()一職過不暸(

還是解題系統使用的jdk太舊?(家裡jdk1.6

 

 import java.util.*;
public class Basic_d098{
    public static void main(String args[]){
        Scanner sn = new Scanner(System.in);
        while(sn.hasNext()){
            int sum = 0;
            sn = new Scanner(sn.nextLine()).useDelimiter("[^0-9]+");
                while(sn.hasNext())
                    sum += sn.nextInt();
            System.out.println(sum);
            sn = new Scanner(System.in);
        }
    }
}

 解題系統上的開發環境版本是 1.5.0_14

 應該不至於到老舊 ... 

 這是我剛剛大致上依照你的方式寫的程式碼 ( 這方法還是第一次用 XD )

  1. import java.util.Scanner;  
  2.   
  3. public class Main {  
  4.     public static void main(String args[]) {  
  5.         Scanner scanner = new Scanner(System.in);  
  6.   
  7.         while(scanner.hasNext()) {  
  8.             int sum = 0;  
  9.             Scanner tmp = new Scanner(scanner.nextLine()).useDelimiter("[ ]+");  
  10.   
  11.             while(tmp.hasNext())  
  12.                 sum += getNumber(tmp.next());  
  13.   
  14.             System.out.println(sum);  
  15.         }  
  16.     }  
  17.   
  18.     static int getNumber(String s) {  
  19.         for(int i = 0; i < s.length(); i++)  
  20.             if(isNumber(s.charAt(i)) == falsereturn 0;  
  21.   
  22.         return Integer.parseInt(s);  
  23.     }  
  24.   
  25.     static boolean isNumber(char ch) {  
  26.         return ch >= '0' && ch <= '9';  
  27.     }  

 useDelimiter() 方法的傳入值是放用來切割字串的 separator

 所以你用 0-9 的話得到的東西會都不是你要的 

 
#3998: Re:這題java測資問題???


example (學姊)

學校 : 臺北市立麗山高級中學
編號 : 6634
來源 : [60.250.138.144]
最後登入時間 :
2022-08-09 17:07:42
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [118.166.112.238] | 發表日期 : 2010-07-16 17:21

這題java來寫是不是有bug??

用雙hasNext()一職過不暸(

還是解題系統使用的jdk太舊?(家裡jdk1.6

 

 import java.util.*;
public class Basic_d098{
    public static void main(String args[]){
        Scanner sn = new Scanner(System.in);
        while(sn.hasNext()){
            int sum = 0;
            sn = new Scanner(sn.nextLine()).useDelimiter("[^0-9]+");
                while(sn.hasNext())
                    sum += sn.nextInt();
            System.out.println(sum);
            sn = new Scanner(System.in);
        }
    }
}

 useDelimiter() 方法的傳入值是放用來切割字串的 separator

 所以你用 0-9 的話得到的東西會都不是你要的 

 在此修正一下 ( 並不是說全部的東西都不是你要的,而是有些跟非數字合在一起的不能用 )

 寫成 useDelimiter("[^0-9]+") 的話會把所有的數字分割出來

 不管有沒有跟字串合併在一起 

 所以說還是要自己判斷 ( 還是有更好用的函數? ) 

 
#3999: Re:這題java測資問題???


welkin001 (無盡的蒼穹(持續更新中~水題集中帖))

學校 : 國立臺中技術學院
編號 : 12344
來源 : [111.252.125.191]
最後登入時間 :
2012-10-27 14:59:49
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [114.46.154.79] | 發表日期 : 2010-07-16 19:44

這題java來寫是不是有bug??

用雙hasNext()一職過不暸(

還是解題系統使用的jdk太舊?(家裡jdk1.6

 

 import java.util.*;
public class Basic_d098{
    public static void main(String args[]){
        Scanner sn = new Scanner(System.in);
        while(sn.hasNext()){
            int sum = 0;
            sn = new Scanner(sn.nextLine()).useDelimiter("[^0-9]+");
                while(sn.hasNext())
                    sum += sn.nextInt();
            System.out.println(sum);
            sn = new Scanner(System.in);
        }
    }
}

 useDelimiter() 方法的傳入值是放用來切割字串的 separator

 所以你用 0-9 的話得到的東西會都不是你要的 

 在此修正一下 ( 並不是說全部的東西都不是你要的,而是有些跟非數字合在一起的不能用 )

 寫成 useDelimiter("[^0-9]+") 的話會把所有的數字分割出來

 不管有沒有跟字串合併在一起 

 所以說還是要自己判斷 ( 還是有更好用的函數? ) 

看來我好像是誤會題目的意思了...(以為有數字的都做相加...

忽略了只要有參雜非數字的文字都不符合的條件...

謝謝你的指正^^

 

 
#4000: Re:這題java測資問題???


welkin001 (無盡的蒼穹(持續更新中~水題集中帖))

學校 : 國立臺中技術學院
編號 : 12344
來源 : [111.252.125.191]
最後登入時間 :
2012-10-27 14:59:49
d098. Stringstream運用練習(C++) -- 說明文件出自C++ Reference | From: [114.46.154.79] | 發表日期 : 2010-07-16 20:32

這題java來寫是不是有bug??

用雙hasNext()一職過不暸(

還是解題系統使用的jdk太舊?(家裡jdk1.6

 

 import java.util.*;
public class Basic_d098{
    public static void main(String args[]){
        Scanner sn = new Scanner(System.in);
        while(sn.hasNext()){
            int sum = 0;
            sn = new Scanner(sn.nextLine()).useDelimiter("[^0-9]+");
                while(sn.hasNext())
                    sum += sn.nextInt();
            System.out.println(sum);
            sn = new Scanner(System.in);
        }
    }
}

 解題系統上的開發環境版本是 1.5.0_14

 應該不至於到老舊 ... 

 這是我剛剛大致上依照你的方式寫的程式碼 ( 這方法還是第一次用 XD )

  1. import java.util.Scanner;  
  2.   
  3. public class Main {  
  4.     public static void main(String args[]) {  
  5.         Scanner scanner = new Scanner(System.in);  
  6.   
  7.         while(scanner.hasNext()) {  
  8.             int sum = 0;  
  9.             Scanner tmp = new Scanner(scanner.nextLine()).useDelimiter("[ ]+");  
  10.   
  11.             while(tmp.hasNext())  
  12.                 sum += getNumber(tmp.next());  
  13.   
  14.             System.out.println(sum);  
  15.         }  
  16.     }  
  17.   
  18.     static int getNumber(String s) {  
  19.         for(int i = 0; i < s.length(); i++)  
  20.             if(isNumber(s.charAt(i)) == falsereturn 0;  
  21.   
  22.         return Integer.parseInt(s);  
  23.     }  
  24.   
  25.     static boolean isNumber(char ch) {  
  26.         return ch >= '0' && ch <= '9';  
  27.     }  

 useDelimiter() 方法的傳入值是放用來切割字串的 separator

 所以你用 0-9 的話得到的東西會都不是你要的 


再次嘗試寫才發現...原來我對Scanner類別不夠了解...

難怪會一直WA...

我前面針對的問題就是針對WA而不是NA邏輯錯誤問題 (一直過不暸怎麼會知道邏輯表達有誤= =

看了你的程式碼才茅塞頓開呀...(雖然最後寫出來幾乎都是抄你改過後我在精簡化= =a

感謝你的回覆...學到更多東西了...學習了^^

 
ZeroJudge Forum