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());
}
}