Java实现字符串垂直输出时遇5个语法错误,请求解决
Java字符串垂直输出代码错误排查与修复
尝试实现Java字符串垂直输出功能,编写了如下代码:
import java.util.*; public class Main { String add_space(s,temp)//for adding the space so as to make all the strings equal { int to_add= max-s.length(); String blank=" "; for(int i=0;i<to_add;i++) { blank=s+blank; } return blank; } void manipulated_array(str, n,max) { int temp=max; for(int i=0;i<n;i++) { String s=str[i]; str[i]=add_space(s,temp); } for(int j =0;j<n;j++) { System.out.print(str[j].charAt(i)); } System.out.println(); } public static void main(String[] args) { Main obj = new Main(); Scanner sc = new Scanner(System.in); int n=sc.nextInt(); String str[]= new String[n]; for(int i=0;i<n;i++) { str[i]=sc.nextLine(); } { int max=str[0].length; for(int i=0;i<n;i++) { if(max=str[i].length()) max=str[i].length(); } obj.manipulated_array( str, n, max); // add_space(String str[],max); } } }
运行时出现以下5个错误:
Main.java:11: error: expected String add_space( s,temp)//for adding the space so as to make all the strings equal ^ Main.java:11: error: expected String add_space( s,temp)//for adding the space so as to make all the strings equal ^ Main.java:22: error: expected void manipulated_array(str, m,ma) ^ Main.java:22: error: expected void manipulated_array(str, m,ma) ^ Main.java:22: error: expected void manipulated_array(str, m,ma) ^ 5 errors
错误分析与修复步骤
1. 方法参数缺失类型声明(编译错误核心原因)
Java方法定义必须明确声明每个参数的类型,原代码中add_space和manipulated_array方法的参数都未指定类型,导致编译报错。
- 修正
add_space方法:参数s为String类型,targetLength为int类型(替换原无意义的temp) - 修正
manipulated_array方法:参数str为String[]类型,n为int类型,max为int类型
2. 未定义变量与方法逻辑错误
add_space方法中引用了未定义的max变量,改为使用传入的targetLength参数计算需要补充的空格数- 补空格逻辑错误:原代码将字符串拼在空格前,应改为给字符串末尾补充空格以保证对齐,改用
StringBuilder实现更高效 manipulated_array方法中第二个for循环引用了已失效的变量i,需重新定义列索引循环,并调整遍历逻辑实现垂直输出
3. Main方法中的其他问题
sc.nextInt()后直接调用sc.nextLine()会读取换行符,导致第一个字符串为空,需添加sc.nextLine()消费换行str[0].length错误,应为str[0].length()(字符串长度是方法调用)if(max=str[i].length())是赋值语句,应改为if(max < str[i].length())比较长度,更新最大长度
修复后的完整代码
import java.util.*; public class Main { // 给字符串补充空格到指定长度,不足的在末尾补空格 String add_space(String s, int targetLength) { StringBuilder sb = new StringBuilder(s); while (sb.length() < targetLength) { sb.append(" "); } return sb.toString(); } void manipulated_array(String[] str, int n, int max) { // 先将所有字符串补到最大长度 for (int i = 0; i < n; i++) { str[i] = add_space(str[i], max); } // 按列输出每个字符,实现垂直输出 for (int col = 0; col < max; col++) { for (int row = 0; row < n; row++) { System.out.print(str[row].charAt(col) + " "); } System.out.println(); } } public static void main(String[] args) { Main obj = new Main(); Scanner sc = new Scanner(System.in); System.out.print("输入字符串数量: "); int n = sc.nextInt(); sc.nextLine(); // 消费nextInt()后的换行符 String[] str = new String[n]; System.out.println("输入" + n + "个字符串:"); for (int i = 0; i < n; i++) { str[i] = sc.nextLine(); } // 计算最长字符串的长度 int max = str[0].length(); for (int i = 1; i < n; i++) { if (str[i].length() > max) { max = str[i].length(); } } obj.manipulated_array(str, n, max); } }
内容的提问来源于stack exchange,提问作者Sumantra Prajapati
相关产品推荐
相关产品推荐

