一个java作业,请大家赐教

package text;

import java.util.*;
class People {
private String name;
private String sex;
private int age;
private int self=0;
static int sum=0;
People(String newName,String newSex,int newage,int newsum){
name=newName;
sex=newSex;
age=newage;
sum++;
self=sum;
}void getName(String getName){
Scanner input = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = input.next();
}void getSex(String getSex){
Scanner input = new Scanner(System.in);
System.out.print("请输入性别(M or W):");
String sex = input.next();
}void getAge(int getAge){
Scanner s = new Scanner(System.in);
System.out.print("请输入整数年龄:");
int age = s.nextInt();
}void search(){
System.out.println("您的姓名"+name);
System.out.println("您的性别"+sex);
System.out.println("您的年龄"+age);
System.out.println("您是第"+self+"出生者");
}
}
class Demo{
public static void main(String[] args){

    Scanner d=new Scanner(System.in); 
    System.out.print("1.注册");
    System.out.print("2.查询");
    System.out.print("3.退出");
    int n=d.nextInt();
    if(n<=3&&n>=1){
        switch(n){
        case 1:
            getName();break;
        case 2:
            search();break;
        case 3:
            System.exit(1);
        }
    }
}

}

为啥我这样运行不了呢,问题出在那三个case对应过去的get啥啥那里
今天作业,定义类People
属性:姓名,性别,年龄,静态属性:人口数量
方法:
设置姓名:从键盘输入姓名
获取姓名:返回姓名
设置性别:从键盘输入字符串,取第一字符赋值给性别,若性别不为'M'或'W',从新输入
获取性别:返回性别
设置年龄:从键盘输入整数赋值给年龄
获取姓名:返回年龄
出生:调用设置姓名/性别/年龄方法,将人口数+1;
在main 方法中创建三个People类对象,调用各对象的出生方法,做好输出人口数。
这个是作业要求

都把你骂了一顿了,还是随手帮你写了一段,自己看看还需要怎么改一下吧。

 package PeopleDemo;

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

/**
 * @author kingbaron
 * @version 1.0
 * @date 2017/3/31
 * @package PeopleDemo
 */
public class People {
    private String name;
    private String sex;
    private int age;
    private static int count=0;

    //带参构造器
    public People(String name,String sex,int age){
        this.name=name;
        this.sex=sex;
        this.age=age;
        //人口计数加一
        count++;
    }
    //一旦实现了带参构造器,一般也许需要实现无参构造器
    public People(){
        //啥也不做,除了人口计数加一
        count++;
    }

    public int getAge() {
        return age;
    }

    public void setAge() {
        this.age = Integer.valueOf(readString());
    }

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex() {
       String temp=readString();
       String sexCandidate=temp.substring(0,1);
        if("W".equalsIgnoreCase(sexCandidate)||"M".equalsIgnoreCase(sexCandidate)){
            this.sex=sexCandidate;
        }else{
            //不男不女
            this.sex="X";
        }
    }
    //一般来说,静态变量在外部通常是只读的
    public static int getCount() {
        return count;
    }

    //重写toString()
    public String toString(){
        return String.format("这货的名字是:%s,性别是:%s,年龄是:%s。现在一共有%s个公户注册!",this.name,this.sex,this.age,this.count);
    }

    public static void main(String[] args){
        List<People> peoples=new ArrayList<>();
        People john=new People("john","Man",20);
        People alice=new People("alice","woman",22);
        People dex=new People("dex","Man",20);
        //自己去添加你要的业务吧
        consoleLog(john);
    }

    /**************helper-method**************/
    private static void consoleLog(Object obj){
        System.out.println(obj.toString());
    }
    private String readString(){
        Scanner scanner=new Scanner(System.in);
        return  scanner.next();
    }
}

话说不用实例化People类的吗?

在if(n<=3&&n>=1){这句话外面写上People peo=new People(); switch case中的getName()改成peo.GetName(); search()也改成peo.Search();
原理,Search方法和getname方法是属于people对象的对象方法,在调用对象方法的时候要有具体的对象

题主你的Demo类中并未实例化People类,如果你想调用函数,不妨将Demo中的main内容加入到People类下,这样同一个类中的函数可以调用。
如果是想单独写个类进行调用的话,你要更改Demo类主方法,加入实例化的过程。
在People类中加入无参数的构造函数

public People(){

}
People实例化:
People p =new People();
将case中语句改为 p.getName() 、p.getSex等内容。
看代码你可能是要实现用户输入的交互,那么你的getName、getSex那些个方法是通过读取用户输入来为你的name、sex等变量赋值的,私以为那个带参数的People构造函数是没必要的。
希望有所帮助。

你所有的get方法中,最后一行都错了。你的最后一行相当于新声明了一个局部变量,在局部变量中保存了console输入,然后方法执行完,局部变量也就释放。
把get方法中最后一行中的类型去掉,比如String name=input.next()改成name=input.next();
以上。

这是什么鬼?点击注册,输入姓名,然后呢?你得把你想要达到的效果或者说需求摆出来,大家才能给你很好的参考。。

每个get方法的最后一行,比如:String name = input.next(),这样你是重新定义了一个变量name,而不是你这个类本身的属性;
应该改成this.name = input.next();这样才会给你的属性赋上值。

题主先按照一般Java类的基本格式来写吧

你那个直接调用方法几个意思

我没有做异常处理,话说这个需求不太符合我得程序设计原则,先为了实现需求而编程,而后再做重构吧.

import java.util.Scanner;

/**
    * 属性:姓名,性别,年龄,静态属性:人口数量
    方法:
    设置姓名:从键盘输入姓名
    获取姓名:返回姓名
    设置性别:从键盘输入字符串,取第一字符赋值给性别,若性别不为'M'或'W',从新输入
    获取性别:返回性别
    设置年龄:从键盘输入整数赋值给年龄
    获取姓名:返回年龄
    出生:调用设置姓名/性别/年龄方法,将人口数+1;
    在main 方法中
    1-创建三个People类对象,
    2-调用各对象的出生方法,
    3-做好输出人口数。
 */
class People {
    //4个属性
    private String name;
    private String sex;
    private int age;
    private static int count = 0;

    //设置姓名:从键盘输入姓名
    public void setName() {
        Scanner sc = new Scanner(System.in);
        this.name = sc.next();
        //sc.close();
    }

    //获取姓名:返回姓名
    public String getName() {
        return this.name;
    }

    //设置性别
    public void setSex() {
        do {
            Scanner sc = new Scanner(System.in);//从键盘输入字符串
            String sex = sc.next();
            //sc.close();
            if (sex.startsWith("w") || sex.startsWith("W")) {
                this.sex = "女";//我把他中文化了
                break;
            } else if (sex.startsWith("m") || sex.startsWith("M")) {
                this.sex = "男";
                break;
            } else {
                System.out.println("请重新输入性别:");
                continue;
            }

        } while (true);
    }

    //获取性别
    public String getSex() {
        return this.sex;
    }

    //设置年龄:从键盘输入整数赋值给年龄
    public void setAge() {
        Scanner sc = new Scanner(System.in);
        this.age = Integer.parseInt(sc.next());
        // sc.close();
    }

    //返回年龄
    public int getAge() {
        return this.age;
    }

    //输出人口数
    public static int getCount() {
        return People.count;
    }

    @Override
    public String toString() {
        return "姓名:" + this.name + ",性别:" + this.sex + ",年龄:" + this.age;
    }

    //出生:调用设置姓名/性别/年龄方法,将人口数+1;
    public void doBirth() {
        System.out.println("请输入第" + (People.count + 1) + "个人的姓名:");
        setName();
        System.out.println("请输入第" + (People.count + 1) + "个人的性别:");
        setSex();
        System.out.println("请输入第" + (People.count + 1) + "个人的年龄:");
        setAge();
        People.count++;
    }
}

public class Person {
    public static void main(String[] args) {
        //1-创建三个People类对象,
        People p1 = new People();
        People p2 = new People();
        People p3 = new People();

        //2-调用各对象的出生方法,
        p1.doBirth();
        p2.doBirth();
        p3.doBirth();

        //3-做好输出人口数。
        System.out.println(p1);
        System.out.println(p2);
        System.out.println(p3);
        System.out.println("现在人口数量:" + People.getCount());
    }
}

import java.util.Scanner;

/**
* 属性:姓名,性别,年龄,静态属性:人口数量
方法:
设置姓名:从键盘输入姓名
获取姓名:返回姓名
设置性别:从键盘输入字符串,取第一字符赋值给性别,若性别不为'M'或'W',从新输入
获取性别:返回性别
设置年龄:从键盘输入整数赋值给年龄
获取姓名:返回年龄
出生:调用设置姓名/性别/年龄方法,将人口数+1;
在main 方法中
1-创建三个People类对象,
2-调用各对象的出生方法,
3-做好输出人口数。
*/
class People {
//4个属性
private String name;
private String sex;
private int age;
private static int count = 0;

//设置姓名:从键盘输入姓名
public void setName() {
    Scanner sc = new Scanner(System.in);
    this.name = sc.next();
    //sc.close();
}

//获取姓名:返回姓名
public String getName() {
    return this.name;
}

//设置性别
public void setSex() {
    do {
        Scanner sc = new Scanner(System.in);//从键盘输入字符串
        String sex = sc.next();
        //sc.close();
        if (sex.startsWith("w") || sex.startsWith("W")) {
            this.sex = "女";//我把他中文化了
            break;
        } else if (sex.startsWith("m") || sex.startsWith("M")) {
            this.sex = "男";
            break;
        } else {
            System.out.println("请重新输入性别:");
            continue;
        }

    } while (true);
}

//获取性别
public String getSex() {
    return this.sex;
}

//设置年龄:从键盘输入整数赋值给年龄
public void setAge() {
    Scanner sc = new Scanner(System.in);
    this.age = Integer.parseInt(sc.next());
    // sc.close();
}

//返回年龄
public int getAge() {
    return this.age;
}

//输出人口数
public static int getCount() {
    return People.count;
}

@Override
public String toString() {
    return "姓名:" + this.name + ",性别:" + this.sex + ",年龄:" + this.age;
}

//出生:调用设置姓名/性别/年龄方法,将人口数+1;
public void doBirth() {
    System.out.println("请输入第" + (People.count + 1) + "个人的姓名:");
    setName();
    System.out.println("请输入第" + (People.count + 1) + "个人的性别:");
    setSex();
    System.out.println("请输入第" + (People.count + 1) + "个人的年龄:");
    setAge();
    People.count++;
}

}

public class Person {
public static void main(String[] args) {
//1-创建三个People类对象,
People p1 = new People();
People p2 = new People();
People p3 = new People();

    //2-调用各对象的出生方法,
    p1.doBirth();
    p2.doBirth();
    p3.doBirth();

    //3-做好输出人口数。
    System.out.println(p1);
    System.out.println(p2);
    System.out.println(p3);
    System.out.println("现在人口数量:" + People.getCount());
}

}