You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中字符串长度初始化数组后输出异常问题求助

问题修复与优化

核心问题分析

  1. 数组打印错误:Java中直接输出数组时,默认返回数组的类型标识和哈希值(如[Ljava.lang.String;@3b9a45b3),而非实际内容。需要手动将数组元素拼接成字符串输出。
  2. toLowerCase()未生效:String是不可变对象,initial_sent.toLowerCase()不会修改原字符串,必须把返回值重新赋值给原变量,否则大写字母会被判定为非字母字符,返回0。

修复后的代码

import java.util.Scanner;

public class Cypher {

    static Scanner obj = new Scanner(System.in);

    public static void main(String[] args) {

        System.out.println("请输入要转换的句子:");
        String initialSent = obj.next();
        // 接收toLowerCase()返回值,将字符串转为小写
        initialSent = initialSent.toLowerCase();
        String[] charArray = new String[initialSent.length()];

        for(int i = 0; i < initialSent.length(); i++){
            char charSingle = initialSent.charAt(i);

            switch(charSingle){
                case 'a': charArray[i] = "1"; break;
                case 'b': charArray[i] = "2"; break;
                case 'c': charArray[i] = "3"; break;
                case 'd': charArray[i] = "4"; break;
                case 'e': charArray[i] = "5"; break;
                case 'f': charArray[i] = "6"; break;
                case 'g': charArray[i] = "7"; break;
                case 'h': charArray[i] = "8"; break;
                case 'i': charArray[i] = "9"; break;
                case 'j': charArray[i] = "10"; break;
                case 'k': charArray[i] = "11"; break;
                case 'l': charArray[i] = "12"; break;
                case 'm': charArray[i] = "13"; break;
                case 'n': charArray[i] = "14"; break;
                case 'o': charArray[i] = "15"; break;
                case 'p': charArray[i] = "16"; break;
                case 'q': charArray[i] = "17"; break;
                case 'r': charArray[i] = "18"; break;
                case 's': charArray[i] = "19"; break;
                case 't': charArray[i] = "20"; break;
                case 'u': charArray[i] = "21"; break;
                case 'v': charArray[i] = "22"; break;
                case 'w': charArray[i] = "23"; break;
                case 'x': charArray[i] = "24"; break;
                case 'y': charArray[i] = "25"; break;
                case 'z': charArray[i] = "26"; break;
                default: charArray[i] = "0"; break;
            }
        }

        // 用String.join将数组元素拼接成连续字符串输出
        System.out.println(String.join("", charArray));

        obj.close();
    }
}

代码优化方案

原代码的switch-case过于冗长,可利用ASCII码特性简化逻辑:小写字母a的ASCII值为97,任意小写字母c对应的数字为c - 'a' + 1,无需逐个匹配:

import java.util.Scanner;

public class Cypher {

    static Scanner obj = new Scanner(System.in);

    public static void main(String[] args) {

        System.out.println("请输入要转换的句子:");
        // 链式调用toLowerCase()简化代码
        String initialSent = obj.next().toLowerCase();
        // 用StringBuilder拼接结果,效率更高
        StringBuilder result = new StringBuilder();

        for(int i = 0; i < initialSent.length(); i++){
            char charSingle = initialSent.charAt(i);
            if(charSingle >= 'a' && charSingle <= 'z'){
                // 计算对应数字并追加到结果中
                result.append(charSingle - 'a' + 1);
            } else {
                result.append("0");
            }
        }

        System.out.println(result.toString());

        obj.close();
    }
}

内容的提问来源于stack exchange,提问作者Vlad Graur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:43:20