#11254: [java]RE問題


maple3142 (maple3142)

學校 : 國立新竹高級中學
編號 : 58619
來源 : [114.34.128.210]
最後登入時間 :
2025-10-01 23:52:13

package maple.basic;

import java.util.Scanner;

public class number11 {
//zj a149
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int q=sc.nextInt();
Integer[] ans=new Integer[q];
String[] num=new String[q];
for(int i=0;i<num.length;i++)
{
num[i]=sc.next();
ans[i]=1;
}
for(int i=0;i<num.length;i++){
String[] tmp=num[i].split("");
for(int j=0;j<tmp.length;j++)
ans[i]*=Integer.parseInt(tmp[j]);
System.out.println(ans[i]);
}
}
sc.close();
}

}

 

在編譯器裡執行都沒問題,但在網站上都會RE

#11255: Re:[java]RE問題


tomoyaken14 (歐練)

學校 : 不指定學校
編號 : 6922
來源 : [211.23.251.161]
最後登入時間 :
2025-09-23 09:30:30

package maple.basic;

import java.util.Scanner;

public class number11 {
//zj a149
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int q=sc.nextInt();
Integer[] ans=new Integer[q];
String[] num=new String[q];
for(int i=0;i<num.length;i++)
{
num[i]=sc.next();
ans[i]=1;
}
for(int i=0;i<num.length;i++){
String[] tmp=num[i].split("");
for(int j=0;j<tmp.length;j++)
ans[i]*=Integer.parseInt(tmp[j]);
System.out.println(ans[i]);
}
}
sc.close();
}

}

 

在編譯器裡執行都沒問題,但在網站上都會RE

ans[i]*=Integer.parseInt(tmp[j]); 時 產生了 NumberFormatException


#11258: Re:[java]RE問題


maple3142 (maple3142)

學校 : 國立新竹高級中學
編號 : 58619
來源 : [114.34.128.210]
最後登入時間 :
2025-10-01 23:52:13

package maple.basic;

import java.util.Scanner;

public class number11 {
//zj a149
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int q=sc.nextInt();
Integer[] ans=new Integer[q];
String[] num=new String[q];
for(int i=0;i<num.length;i++)
{
num[i]=sc.next();
ans[i]=1;
}
for(int i=0;i<num.length;i++){
String[] tmp=num[i].split("");
for(int j=0;j<tmp.length;j++)
ans[i]*=Integer.parseInt(tmp[j]);
System.out.println(ans[i]);
}
}
sc.close();
}

}

 

在編譯器裡執行都沒問題,但在網站上都會RE

ans[i]*=Integer.parseInt(tmp[j]); 時 產生了 NumberFormatException



測資給的不都是數字嗎?

#11270: Re:[java]RE問題


tomoyaken14 (歐練)

學校 : 不指定學校
編號 : 6922
來源 : [211.23.251.161]
最後登入時間 :
2025-09-23 09:30:30

package maple.basic;

import java.util.Scanner;

public class number11 {
//zj a149
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int q=sc.nextInt();
Integer[] ans=new Integer[q];
String[] num=new String[q];
for(int i=0;i<num.length;i++)
{
num[i]=sc.next();
ans[i]=1;
}
for(int i=0;i<num.length;i++){
String[] tmp=num[i].split("");
for(int j=0;j<tmp.length;j++)
ans[i]*=Integer.parseInt(tmp[j]);
System.out.println(ans[i]);
}
}
sc.close();
}

}

 

在編譯器裡執行都沒問題,但在網站上都會RE

ans[i]*=Integer.parseInt(tmp[j]); 時 產生了 NumberFormatException



測資給的不都是數字嗎?


hi,

 

其實你遇到的問題都是同一個

 

在 Java jdk 1.7 之前的 split("")

 

一個字串 s = "123456789"

 

在經過 String sa[] =s.split("") 分解後

 

sa[0]的值 應該為 "" 而非 "1"

 

但是在Java jdk 1.8之後的 split("")

 

sa[0]的值 應該為 "1" 而非 ""

 

而zerojudge 所使用的編譯器為 JAVA: OpenJDK java version 1.7.0_65

 

所以使用上必須注意 Java(jdk)環境的不同

 

關於Java 1.7 到 Java 1.8 regex 的不同 可以參考此篇 

 

http://stackoverflow.com/questions/22718744/why-in-java-8-split-sometimes-removes-empty-strings-at-start-of-result-array

 

另外,將字串分離的方法除了split("")外,toCharArray也是個不錯的選擇 ^_^

 

謝謝

#11338: Re:[java]RE問題


maple3142 (maple3142)

學校 : 國立新竹高級中學
編號 : 58619
來源 : [114.34.128.210]
最後登入時間 :
2025-10-01 23:52:13

package maple.basic;

import java.util.Scanner;

public class number11 {
//zj a149
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int q=sc.nextInt();
Integer[] ans=new Integer[q];
String[] num=new String[q];
for(int i=0;i<num.length;i++)
{
num[i]=sc.next();
ans[i]=1;
}
for(int i=0;i<num.length;i++){
String[] tmp=num[i].split("");
for(int j=0;j<tmp.length;j++)
ans[i]*=Integer.parseInt(tmp[j]);
System.out.println(ans[i]);
}
}
sc.close();
}

}

 

在編譯器裡執行都沒問題,但在網站上都會RE

ans[i]*=Integer.parseInt(tmp[j]); 時 產生了 NumberFormatException



測資給的不都是數字嗎?


hi,

 

其實你遇到的問題都是同一個

 

在 Java jdk 1.7 之前的 split("")

 

一個字串 s = "123456789"

 

在經過 String sa[] =s.split("") 分解後

 

sa[0]的值 應該為 "" 而非 "1"

 

但是在Java jdk 1.8之後的 split("")

 

sa[0]的值 應該為 "1" 而非 ""

 

而zerojudge 所使用的編譯器為 JAVA: OpenJDK java version 1.7.0_65

 

所以使用上必須注意 Java(jdk)環境的不同

 

關於Java 1.7 到 Java 1.8 regex 的不同 可以參考此篇 

 

http://stackoverflow.com/questions/22718744/why-in-java-8-split-sometimes-removes-empty-strings-at-start-of-result-array

 

另外,將字串分離的方法除了split("")外,toCharArray也是個不錯的選擇 ^_^

 

謝謝

非常感謝解答,之前也遇過很多類似的split()問題,終於解決了:)


之前都不知道原來java 1.7 1.8的spilit有變更