为什么运行出来的 姓名 性别都是? 不能中文 只能英文

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StudentManagementSystem {

static List<Student> studentList = new ArrayList<>();

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    while (true) {
        System.out.println("1.添加学生信息");
        System.out.println("2.查询学生信息");
        System.out.println("3.修改学生信息");
        System.out.println("4.删除学生信息");
        System.out.println("5.显示所有学生信息");
        System.out.println("6.退出");

        int choice = scanner.nextInt();

        switch (choice) {
            case 1:
                addStudent();
                break;
            case 2:
                searchStudent();
                break;
            case 3:
                modifyStudent();
                break;
            case 4:
                deleteStudent();
                break;
            case 5:
                displayAllStudents();
                break;
            case 6:
                System.exit(0);
            default:
                System.out.println("输入无效,请重新输入!");
                break;
        }
    }
}

private static void addStudent() {
    Scanner scanner = new Scanner(System.in);

    System.out.println("请输入学生姓名:");
    String name = scanner.nextLine();
    System.out.println("请输入学生体重:");
    int age = scanner.nextInt();
    scanner.nextLine();
    System.out.println("请输入学生性别:");
    String gender = scanner.nextLine();
    System.out.println("请输入学生学号:");
    String number = scanner.nextLine();
    System.out.println("请输入学生课程:");
    String className = scanner.nextLine();

    Student student = new Student(name, age, gender, number, className);
    studentList.add(student);

    System.out.println("添加成功!");
}

private static void searchStudent() {
    Scanner scanner = new Scanner(System.in);

    System.out.println("请输入要查询的学生学号:");
    String number = scanner.nextLine();

    for (Student student : studentList) {
        if (student.getNumber().equals(number)) {
            System.out.println(student);
            return;
        }
    }

    System.out.println("没有找到该学生!");
}

private static void modifyStudent() {
    Scanner scanner = new Scanner(System.in);

    System.out.println("请输入要修改的学生学号:");
    String number = scanner.nextLine();

    for (Student student : studentList) {
        if (student.getNumber().equals(number)) {
            System.out.println("请输入学生姓名(原姓名:" + student.getName() + "):");
            String name = scanner.nextLine();
            student.setName(name);
            System.out.println("请输入学生体重(原体重:" + student.getAge() + "):");
            int age = scanner.nextInt();
            student.setAge(age);
            scanner.nextLine();
            System.out.println("请输入学生性别(原性别:" + student.getGender() + "):");
            String gender = scanner.nextLine();
            student.setGender(gender);
            System.out.println("请输入学生课程(原课程:" + student.getClassName() + "):");
            String className = scanner.nextLine();
            student.setClassName(className);

            System.out.println("修改成功!");
            return;
        }
    }

    System.out.println("没有找到该学生!");
}

private static void deleteStudent() {
    Scanner scanner = new Scanner(System.in);

    System.out.println("请输入要删除的学生学号:");
    String number = scanner.nextLine();

    for (int i = 0; i < studentList.size(); i++) {
        if (studentList.get(i).getNumber().equals(number)) {
            studentList.remove(i);
            System.out.println("删除成功!");
            return;
        }
    }

    System.out.println("没有找到该学生!");
}

private static void displayAllStudents() {
    for (Student student : studentList) {
        System.out.println(student);
    }
}

}

class Student {

private String name;
private int age;
private String gender;
private String number;
private String className;

public Student(String name, int age, String gender, String number, String className) {
    this.name = name;
    this.age = age;
    this.gender = gender;
    this.number = number;
    this.className = className;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

public String getGender() {
    return gender;
}

public void setGender(String gender) {
    this.gender = gender;
}

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}

public String getClassName() {
    return className;
}

public void setClassName(String className) {
    this.className = className;
}

@Override
public String toString() {
    return "姓名:" + name + ",体重:" + age + ",性别:" + gender + ",学号:" + number + ",课程:" + className;
}

}

这个问题可能是你使用了不支持中文的IDE或者控制台。可以尝试在代码中添加以下语句来解决中文乱码问题:

System.setProperty("console.encoding","UTF-8");

或者在IDE的设置中更改字符集为UTF-8。另外,如果在Windows操作系统下运行代码,还需要在控制台中设置字符集为UTF-8,才能够正确显示中文。

编码是UTF-8的吗

可能是编码格式的问题。检查你的代码文件和控制台的编码格式是否一致,建议使用UTF-8编码格式

你怎么运行的? 是 使用 cmd命令行 ,还是 其他开发工具里

  • cmd命令里, javac 编译时,可以加上 -encoding utf-8,指定使用utf-8进行编译【如果不行可改成 -encoding gbk】
javac -encoding utf-8 Main.java

-开发工具里,运行类的 run configuration 里 ,添加 vm options,里面加上 -Dfile-encoding=utf-8【如果不行可改成 -Dfile-encoding=gbk】

img

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7529629
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:奇数位上都是奇数或者偶数位上都是偶数
  • 除此之外, 这篇博客: 这些结构体常见知识你都了解了吗?中的 结构体的声明 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们拿一个学生来举例

    struct Stu
    {
    	int age;//学生的年龄
    	char name[20];//学生的名字
    	float weight;//学生的体重
    }s;//自己定义的全局变量
  • 您还可以看一下 王而川老师的基于以太坊构建区块链网络入门到精通课程中的 多重名钱包小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答: 这个问题是因为程序在处理姓名和性别的输入时,没有正确设置字符编码。中文字符一般采用UTF-8编码,而英文字符一般采用ASCII编码。如果程序默认使用ASCII编码,那么中文字符就无法正确显示,会出现问号、“□”等非正常字符。

    解决方案是要在程序中设置正确的字符编码,或者在输入时进行转码。可以使用如下代码来进行编码转换:

    #include <locale.h>
    #include <wchar.h>
    #include <string>
    #include <iostream>
    using namespace std;
    
    int main() {
        setlocale(LC_ALL, ""); //设置本地化环境
        wstring name = L"张三"; //输入的姓名
        wstring gender = L"男"; //输入的性别
        wcout << "姓名:" << name << endl; //输出姓名
        wcout << "性别:" << gender << endl; //输出性别
        return 0;
    }
    

    这段代码使用了宽字符类型 (wchar) 来表示中文字符,并将本地化环境设置为系统的默认环境。通过使用wcout输出中文字符,程序可以正常显示中文字符。同时,也可以使用Unicode或者其他编码方式进行输入和输出。