線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1505
推到 Plurk!
推到 Facebook!

我的程式有問題......

答題得分者是:blowfish
bradchow
一般會員


發表:16
回覆:13
積分:5
註冊:2002-12-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-21 11:00:17 IP:218.162.xxx.xxx 未訂閱
import java.io.*; public class Untitled1 { public static void main(String[] args) throws IOException {   int meter,hour=0,money=0;   System.out.print("Please input this hour :");   hour=System.in.read();   System.out.print("Please input total meters :");   meter=System.in.read();   if (meter<1000) { money=60; } else if (hour<23 && hour >8) { money=60 ((6*(meter-1000)/500) 1); } else if ((hour>23 && hour<=24) || (hour>=0 && hour<=8)) { money=60 ((6*(meter-1000)/300) 1); } else { System.out.println("看到鬼!!"); } System.out.println("The total money is :" money); } } 我這個程式是要計算計程車車資的,我把程式寫好之後,再一開始要run就出問題,問題就是: 一開始的 System.out.print("Please input this hour :"); hour=System.in.read(); System.out.print("Please input total meters :"); meter=System.in.read(); 我設了兩個System.in.read(),但是程式才讓我輸入一個值,就跳掉了,好奇怪,還有一個問題就是,像如果是要計算車資的話,輸入的值一定是整數值,那如果用System.in.read()這種方法讀取值,是不是只能讀到第一個字呢?那如果我要讀整個整數值的話,我要如何寫呢? 請給位大哥救救我.... 發表人 - bradchow 於 2002/12/21 11:08:13
blowfish
一般會員


發表:8
回覆:35
積分:18
註冊:2002-12-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-21 13:30:45 IP:203.73.xxx.xxx 未訂閱
引言: 我這個程式是要計算計程車車資的,我把程式寫好之後,再一開始要run就出問題,問題就是: 一開始的 System.out.print("Please input this hour :"); hour=System.in.read(); System.out.print("Please input total meters :"); meter=System.in.read(); 我設了兩個System.in.read(),但是程式才讓我輸入一個值,就跳掉了,好奇怪,還有一個問題就是,像如果是要計算車資的話,輸入的值一定是整數值,那如果用System.in.read()這種方法讀取值,是不是只能讀到第一個字呢?那如果我要讀整個整數值的話,我要如何寫呢?
你可以試試下面的Code
import java.io.*;    public class Test01 {      public Test01() {
  }      public static void main(String[] args) {        int hour = 0 ;
    int money = 0 ;
    int meter = 0;        try {
      //把InputStream用BufferedReader包起來.
      BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));          System.out.print("Please Input hour: ");
      hour = Integer.parseInt(stdIn.readLine()); //將輸入的字串轉換成int          System.out.print("\nPlease Input meter: ");
      meter = Integer.parseInt(stdIn.readLine());          //計算總金額
      if (meter<1000){
        money = 60;
      } else if (hour<23 && hour >8){
        money = 60 ((6*(meter-1000)/500) 1);
      } else if ((hour>23 && hour<=24) || (hour>=0 && hour<=8)){
        money=60 ((6*(meter-1000)/300) 1);
      }else{
        System.out.println("看到鬼!!");
      }          System.out.println("The total money is :"  money);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}
System.in.read()只是讀一個byte而已,所以不管你輸入再多也只是讀入第一個字而已. 可以用System.in.read(byte[] inputByte)來讀入多入字元放到Byte Array中. 至於輸入一次就會跳掉這個問題,我也有點被搞迷糊了...為什麼會這樣呢? 也麻煩請其他高手說明一下吧. BCB新手
------
=== Study, Study and Study ===
bradchow
一般會員


發表:16
回覆:13
積分:5
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-22 09:32:45 IP:218.162.xxx.xxx 未訂閱
引言:System.in.read()只是讀一個byte而已,所以不管你輸入再多也只是讀入第一個字而已. 可以用System.in.read(byte[] inputByte)來讀入多入字元放到Byte Array中. 至於輸入一次就會跳掉這個問題,我也有點被搞迷糊了...為什麼會這樣呢? 也麻煩請其他高手說明一下吧.
用你這個方法真的就完成了我的小程式,謝謝! 初學者的問題真的蠻煩的哦~~~ 跟大家一起學JAVA,真的不錯哦~~~~
skini
一般會員


發表:2
回覆:30
積分:16
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-23 10:09:26 IP:202.145.xxx.xxx 未訂閱
其實 System.in 就是 Standard Input Stream 的意思,所謂的 stream 就是指 flowing buffer of characters,而這個 standard input stream 就是一種 stream ,這條 stream 專門用來取得 keyboard 打入的字元,使用 standard input stream 是老式 text-based application 的必備技巧,因為必須取得客戶輸入的資料。 至於要如何處理 Standard Input Stream 的資料算是 java.io.InputStream 的主要工作,這個類別可以使用 read() 來 Reads the next byte of data from the input stream。 read() 會回答 single character 或是 -1 代表到底,所以 while (System.in.read() != -1) 變成常見的讀取 input stream 的樣式。 所以您輸入的值是 n+2個 (2是換行符號 13 10) 當您第一執行程式時,Stream 是空的,所以會等待您輸值, 例如 : 您第一輸入值 123 按Enter時,Stream 內的值會是 49 50 51 13 10 只要Stream有值時,System.in.read() 就直接取 您可試試下面程式 System.out.println(System.in.read()); System.out.println(System.in.read()); System.out.println(System.in.read()); System.out.println(System.in.read()); System.out.println(System.in.read()); 輸入 123 輸出的值應為 49 50 51 13 10 處理方法1:如 blowfish 使用 BufferedReader 處理方法2: while ((ch = System.in.read()) != '\n') System.out.print ((char) ch); 不同需求,有不同的處理方式
blowfish
一般會員


發表:8
回覆:35
積分:18
註冊:2002-12-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-23 13:29:47 IP:203.70.xxx.xxx 未訂閱
引言: 例如 : 您第一輸入值 123 按Enter時,Stream 內的值會是 49 50 51 13 10 只要Stream有值時,System.in.read() 就直接取 您可試試下面程式 System.out.println(System.in.read()); System.out.println(System.in.read()); System.out.println(System.in.read()); System.out.println(System.in.read()); System.out.println(System.in.read()); 輸入 123 輸出的值應為 49 50 51 13 10
經過skini的詳細解釋後,終於解開我心的疑惑了. 當初我一直以為換行碼,系統自己會過濾掉. 原來是沒有.. 過我試了的結果,似乎只抓到> ===
------
=== Study, Study and Study ===
系統時間:2024-05-18 16:13:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!