码农longlyma 2025-04-26 14:24 采纳率: 33.3%
浏览 32

华为仓颉语言编程遇到问题,有一条报错不知道如何解决

华为仓颉语言编程遇到问题,有一条报错不知道如何修改,我的目的是将联系人信息拼接成字符串,再把字符串转换为字节数组,最后将字节数组写入文件,但是在字符串转换为字节数组的过程中遇到了问题,恳求各位的帮助


package cangjie_project
import std.console.*
import std.fs.*
import std.collection.ArrayList
import std.math.numeric.BigInt
import std.math.numeric.OverflowStrategy


struct Contact {
    var name: String = '0' 
    var phoneNumber: String = '0'

    Contact(
        name: String ,   
        phoneNumber: String 
    ) {
        this.name=name
        this.phoneNumber=phoneNumber
    }
}

// 通讯录类
class AddressBook {
    private var contacts: ArrayList<Contact> = ArrayList<Contact>()

    // 添加联系人
    func addContact(name: String, phoneNumber: String) {
    let newContact = Contact(name, phoneNumber)
    contacts.append(newContact)
    println("联系人添加成功!")
    }

    // 显示所有联系人
    func displayContacts() {
        if (contacts.isEmpty()) {
            println("通讯录为空。")
        } else {
            println("通讯录中的联系人:")
            for (contact in contacts) {
                println("姓名: ${contact.name}, 电话号码: ${contact.phoneNumber}")
            }
        }
    }

    // 查找联系人
    func findContact(name: String) {
        var found = false
        for (contact in contacts) {
            if (contact.name == name) {
                println("姓名: ${contact.name}, 电话号码: ${contact.phoneNumber}")
                found = true
                break
            }
        }
        if (!found) {
            println("未找到该联系人。")
        }
    }

    // 删除联系人
    func deleteContact(name: String) {
        for (i in 0..contacts.size) {
            if (contacts[i].name == name) {
                contacts.remove(i)
                println("联系人删除成功!")
                return
            }
        }
        println("未找到该联系人,无法删除。")
    }

    // 保存到文件
func saveToFile() {
    var content = ""
    for (contact in contacts) {
        content += "${contact.name},${contact.phoneNumber}\n"
    }
    let contentBytes = content.toBytes()
    File.writeTo("通讯录.txt", contentBytes)
}

    // 从文件加载
    func loadFromFile() {
        if (File.exists("通讯录.txt")) {
            let content = File.readFrom("通讯录.txt").toString()
            for (line in c
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-04-26 14:24
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你遇到的问题是华为仓颉语言编程中将字符串转换为字节数组时报错,以下是可能的解决方案:

    1. 检查字符串是否包含非法字符 在仓颉语言中,字符串可能包含非法字符,这些字符在转换为字节数组时可能会报错。可以使用 string.replace() 方法将非法字符替换为合法字符。
    string = string.replace("\0", "")
    
    1. 使用 string.getBytes() 方法 仓颉语言提供了 string.getBytes() 方法,可以将字符串转换为字节数组。
    byte[] bytes = string.getBytes("UTF-8");
    
    1. 检查文件编码 如果你将字节数组写入文件,需要检查文件编码是否正确。仓颉语言支持多种编码方式,可以使用 FileOutputStream 对象的 setEncoding() 方法设置编码方式。
    FileOutputStream fos = new FileOutputStream("file.txt");
    fos.setEncoding("UTF-8");
    
    1. 检查文件路径 最后,检查文件路径是否正确,确保文件路径不存在或已经删除。

    如果你仍然遇到问题,可以提供更多的代码和错误信息,我将尽力帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月26日