這題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);
}
}
}
這題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);
}
}
}
這題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 )
useDelimiter() 方法的傳入值是放用來切割字串的 separator
所以你用 0-9 的話得到的東西會都不是你要的
這題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]+") 的話會把所有的數字分割出來
不管有沒有跟字串合併在一起
所以說還是要自己判斷 ( 還是有更好用的函數? )
這題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]+") 的話會把所有的數字分割出來
不管有沒有跟字串合併在一起
所以說還是要自己判斷 ( 還是有更好用的函數? )
看來我好像是誤會題目的意思了...(以為有數字的都做相加...
忽略了只要有參雜非數字的文字都不符合的條件...
謝謝你的指正^^
這題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 )
useDelimiter() 方法的傳入值是放用來切割字串的 separator
所以你用 0-9 的話得到的東西會都不是你要的
再次嘗試寫才發現...原來我對Scanner類別不夠了解...
難怪會一直WA...
我前面針對的問題就是針對WA而不是NA邏輯錯誤問題 (一直過不暸怎麼會知道邏輯表達有誤= =
看了你的程式碼才茅塞頓開呀...(雖然最後寫出來幾乎都是抄你改過後我在精簡化= =a
感謝你的回覆...學到更多東西了...學習了^^