Java代码类型转换报错求助:需数组但检测到String类型
解决Java中String索引访问导致的类型转换错误
错误原因
你遇到的Main.java:18: error: array required, but String found错误,核心问题是Java的String不是数组类型,不能直接用s[i]这种数组索引的方式访问字符。要获取String中指定位置的字符,必须使用charAt(int index)方法。
另外,就算拿到了字符,直接传给Integer.parseInt()也会出问题——parseInt()接收的是String类型,直接传char的话,Java会把它当成ASCII码值处理,得到的不是你想要的数字。
修复方案
有两种常用的修复方式,都能解决类型转换问题:
方案1:将char转为String后再转整数
先通过charAt(i)拿到字符,再用String.valueOf()把字符转成String,最后传给Integer.parseInt()得到数字:
public class Main{ public static void main(String[] args) { int n=234; int ans=1; int diff; int sum=0; String s = Integer.toString(n); for(int i=0;i<s.length();i++){ int digit = Integer.parseInt(String.valueOf(s.charAt(i))); ans = ans * digit; sum = sum + digit; } diff=ans-sum; System.out.println(ans); } }
方案2:利用ASCII码特性直接转整数(更高效)
字符'0'到'9'的ASCII码是连续的,'0'的ASCII值是48,'1'是49,以此类推。用字符减去'0'就能直接得到对应的整数,不需要额外的字符串转换:
public class Main{ public static void main(String[] args) { int n=234; int ans=1; int diff; int sum=0; String s = Integer.toString(n); for(int i=0;i<s.length();i++){ int digit = s.charAt(i) - '0'; ans = ans * digit; sum = sum + digit; } diff=ans-sum; System.out.println(ans); } }
说明
方案2的性能更好,省去了String对象的创建和解析操作,代码也更简洁,推荐使用这种方式。
内容的提问来源于stack exchange,提问作者ASWATHI S 20CSR024
相关产品推荐
相关产品推荐

