A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一直对在控制台输入的数据进行获取这里出现问题  最开始学毕老师的视频里面是用IO流进行键盘获取的  最近看到一个小题如下根据年龄进行门票收费:我的代码

import java.util.Scanner;
class Tourist {
String name;
int age;
public void ticket() {
  if (this.age > 15) {
   System.out.println(this.name + "的年龄为" + this.age + ",门票价格为:20");
  } else
   System.out.println(this.name + "的年龄为" + this.age + ",门票价格为:免费");
}
}
public class Test2 {
public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  while (true) {
   System.out.println("请输入名字");
   String name = scanner.next();
   if (name.equals("n")) {
    System.out.println("退出");
    break;
   }
   Tourist t = new Tourist();
   t.name = name;
   System.out.println("请输入年龄");
   t.age = scanner.nextInt();
   t.ticket();
  }
}
}
这种scanner方法是可以的,我最开始是想用IO流读取键盘输入的  但是在读取时用到read()方法 它是读取的int型数据   所以疑惑点有两个1、用它怎么数据类型转换,因为在读取名字时是汉字  2、用read()读取要从第一个字符开始  我如果前面还有文字  怎么跨过 比如(一行)“请输入年龄:”35  如何把前面文字跨过

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

4 个回复

倒序浏览
你可以用BufferedReader来读取   读到的就是一行字符串  然后根据自己的需求来转换  至于要跳过  直接读了不用  再读就可以了
回复 使用道具 举报
蒋映辉 发表于 2012-7-4 15:42
你可以用BufferedReader来读取   读到的就是一行字符串  然后根据自己的需求来转换  至于要跳过  直接读了 ...

但是这个在读取的时候是读到的asc码啊 我当时做从键盘读取数字运算 就没有做出来  很纠结这个  版主给写个程序参考下 我实在是不会了 想了好长时间  还有怎么才能读出来不用呢  难道要多个判断吗? int ch=0; ch=in.read();  当ch等于一个标示符的时候再将它开始获取吗  求解啊 抓的头发都长了 呵呵

点评

直接用readLine()方法 读入一行字符串 输入的时候只要回车代表一行读入完毕....就能获取了 获取以后再根据需要处理  发表于 2012-7-4 16:13
回复 使用道具 举报
本帖最后由 黄丽慧 于 2012-7-5 11:36 编辑

楼主,我把你的代码复制到eclipse里面编译运行发现,只能输出一行“请输入名字”,然后就挂了。仔细看了代码之后发现, Tourist 类里面没有带参数的构造方法,而是创建对象后再调用对象的成员变量进行赋值。我个人感觉,使用构造函数来进行成员变量的初始化应该会比较好,这样主函数里面直接调用就行了,看起来会比较直观。
然后我自己编写了一个代码来实现楼主的功能,代码中是通过IO流读取键盘输入数据,主要是使用了BufferedReader 的readLine() 来实现数据的读取,最后面是代码的运行结果,楼主可以试一下看看。
package com.lianxi;
import java.io.*;
class Tourist {
String name;
int age;
public Tourist(String n,int a)
{
    name=n;
    age=a;
}
@SuppressWarnings("finally")
public static String in()//主函数中会从控制台接收两次数据,因此我在tourist类中写了这个静态方法,可以通过类名直接调用
{
        String str=null;
        try{
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//创建一个bufferreader对象,其读取的是从控制台接收的数据
                str = br.readLine();                                                
                }
                catch(IOException e)
                {
                        System.err.println("Error:"+e);
                }
        finally
        {
                return str;
        }
}
public void ticket() {
  if (this.age > 15) {
   System.out.println(this.name + "的年龄为" + this.age + ",门票价格为:20");
  } else
   System.out.println(this.name + "的年龄为" + this.age + ",门票价格为:免费");
}
}
public class lianxi19 {

        /**
         * @param args
         */
        public static void main(String[] args) {               
                System.out.println("请输入姓名:");        
                String str1=Tourist.in();
                System.out.println("请输入年龄:");        
                int t=Integer.parseInt(Tourist.in());
                Tourist tour=new Tourist(str1,t);//创建一个tourist对象把获取的数据传入进行判断
                tour.ticket();
        }

}
上面代码中,我使用了bufferreader从控制台接受数据,运行的结果是

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
Scanner 比较好用些 它能读所有的基本类型
BufferedReader 只能读取字符串 而且操作起来很麻烦
Scanner 也能按行读取
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马