第4周 4.2 簡單輸入輸出

安绍峰發表於2024-09-28

2.5 控制檯輸入與輸出

2.5.1 控制檯輸入

在 Java 中,可以使用 Scanner 類來實現控制檯輸入。Scanner 類位於 java.util 包中,因此在使用 Scanner 類之前需要先匯入該包。
import java.util.Scanner;
使用 Scanner 類實現控制檯輸入的步驟如下:

  1. 建立 Scanner 物件,並將控制檯輸入流作為引數傳遞給 Scanner 構造方法。
    Scanner scanner = new Scanner(System.in);
  2. 使用 Scanner 物件的相應方法讀取控制檯輸入的資料。
    scanner.nextInt();
  3. 關閉 Scanner 物件。
    scanner.close();

1.從控制檯輸入整數

下面例項是接收使用者輸入的資料且輸出平均值:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入第一個整數:");
        int a = scanner.nextInt();
        System.out.print("請輸入第二個整數:");
        int b = scanner.nextInt();
        System.out.print("請輸入第三個整數:");
        int c = scanner.nextInt();
        int sum = a + b + c;
        double average = sum / 3.0;
        System.out.println("三個整數的平均值為:" + average);
        scanner.close();
    }
}

在上述程式碼中,首先建立了一個 Scanner 物件 scanner,然後使用 scanner.nextInt()方法讀取使用者輸入的整數,並將其賦值給變數 a、b 和 c。接著,計算三個整數的和,並計算平均值,最後使用 System.out.println()方法輸出結果。最後,呼叫 scanner.close()方法關閉 Scanner 物件。

2.從控制檯輸入浮點數

下面例項是接收使用者輸入的資料且輸出平均值:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入第一個浮點數:");
        double a = scanner.nextDouble();
        System.out.print("請輸入第二個浮點數:");
        double b = scanner.nextDouble();
        System.out.print("請輸入第三個浮點數:");
        double c = scanner.nextDouble();
        double sum = a + b + c;
        double average = sum / 3.0;
        System.out.println("三個浮點數的平均值為:" + average);
        scanner.close();
    }
}

在上述程式碼中,首先建立了一個 Scanner 物件 scanner,然後使用 scanner.nextDouble()方法讀取使用者輸入的浮點數,並將其賦值給變數 a、b 和 c。接著,計算三個浮點數的和,並計算平均值,最後使用 System.out.println()方法輸出結果。最後,呼叫 scanner.close()方法關閉 Scanner 物件。

3.從控制檯輸入字串

下面例項是接收使用者輸入的資料且輸出字串:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入一個字串:");
        String str = scanner.nextLine();
        System.out.println("你輸入的字串是:" + str);
        scanner.close();
    }
}

上述程式碼中,首先建立了一個 Scanner 物件 scanner,然後使用 scanner.nextLine()方法讀取使用者輸入的字串,並將其賦值給變數 str。接著,使用 System.out.println()方法輸出結果。最後,呼叫 scanner.close()方法關閉 Scanner 物件。

4.其它型別資料的輸入

除了上述的輸入型別,還有其它型別的資料輸入,如:nextByte(), nextShort(), nextLong(), nextFloat(), nextDouble()等。這些方法的使用方式與 nextDouble()類似,都是透過建立 Scanner 物件,然後使用相應的方法讀取使用者輸入的資料,並將其賦值給相應的變數。

瞭解更多輸入方式 ****

5.從檔案中讀取資料

除了從控制檯讀取資料,還可以從檔案中讀取資料。下面例項是讀取檔案中的資料並輸出:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述程式碼中,首先建立了一個 BufferedReader 物件 reader,然後使用 reader.readLine()方法讀取檔案中的每一行資料,並將其輸出。最後,呼叫 reader.close()方法關閉 BufferedReader 物件。

6.從網路中讀取資料

除了從檔案和網路中讀取資料,還可以從網路中讀取資料。下面例項是讀取網路中的資料並輸出:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://www.example.com");
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述程式碼中,首先建立了一個 URL 物件 url,然後使用 url.openStream()方法開啟網路連線,並建立了一個 BufferedReader 物件 reader。接著,使用 reader.readLine()方法讀取網路中的每一行資料,並將其輸出。最後,呼叫 reader.close()方法關閉 BufferedReader 物件。

7.從鍵盤讀取資料

除了從檔案和網路中讀取資料,還可以從鍵盤讀取資料。下面例項是讀取鍵盤輸入的資料並輸出:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("請輸入內容:");
            String line = reader.readLine();
            System.out.println("您輸入的內容是:" + line);
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
            }
            ```
上述程式碼中,首先建立了一個 BufferedReader 物件 reader,然後使用 reader.readLine()方法讀取鍵盤輸入的內容,並將其輸出。最後,呼叫 reader.close()方法關閉 BufferedReader 物件。
#### 8.從控制檯讀取資料
除了從鍵盤讀取資料,還可以從控制檯讀取資料。下面例項是讀取控制檯輸入的資料並輸出:

```java
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("請輸入內容:");
            String line = reader.readLine();
            System.out.println("您輸入的內容是:" + line);
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述程式碼中,首先建立了一個 BufferedReader 物件 reader,然後使用 reader.readLine()方法讀取控制檯輸入的內容,並將其輸出。最後,呼叫 reader.close()方法關閉 BufferedReader 物件。


2.5.2 格式化輸出

前面我們使用System.out.println()輸出換行,和System.out.print()輸出不換行,但是這兩個方法都不能對輸出的內容進行格式化。如果需要對輸出內容進行格式化,可以使用System.out.printf()方法。System.out.printf()方法類似於 C 語言中的 printf()函式,可以按照指定的格式輸出資料。下面例項演示瞭如何使用 printf()方法進行格式化輸出:


1.使用 printf()方法

public class Main {

    public static void main(String[] args) {
        int num = 10;
        double pi = 3.14159;
        String name = "張三";
        System.out.printf("整數:%d,浮點數:%f,字串:%s\n", num, pi, name);
    }
}

上述程式碼中,使用 printf()方法按照指定的格式輸出整數、浮點數和字串。其中,

  • %d 表示輸出整數,
  • %f 表示輸出浮點數,
  • %s 表示輸出字串。

2.使用 String.format()方法

在 Java 中,還可以使用 String.format()方法進行格式化輸出。String.format()方法可以將格式化的字串返回,而不是直接輸出。下面例項演示瞭如何使用 String.format()方法進行格式化輸出:

public class Main {

    public static void main(String[] args) {
        int num = 10;
        double pi = 3.14159;
        String name = "張三";
        String result = String.format("整數:%d,浮點數:%f,字串:%s", num, pi, name);
        System.out.println(result);
    }
}

上述程式碼中,使用 String.format()方法按照指定的格式輸出整數、浮點數和字串,並將結果儲存在 result 變數中,最後輸出 result 變數的值。

其它輸出:

int num = 10;
final double pi = 3.14159;
String name = "張三";
    System.out.printf("%9.2f\n",pi);//9.2 中9為長度,2為小數位數,`\n`表示換行
    System.out.printf("%+9.2f\n",pi);//+ 表示輸出的數帶正負號
    System.out.printf("%+9.2f\n",pi);//+ 表示輸出的數帶正負號
    System.out.printf("%-9.2f\n",pi);//- 表示左對齊
    System.out.printf("%+-9.2f\n",pi);//- 表示輸出的數帶正負號且左對齊
瞭解更多輸出輸入方式 ### 2.5.3 輸出重定向

在 Java 中,可以使用 System.setOut()方法將輸出重定向到指定的輸出流中。下面例項演示瞭如何將輸出重定向到檔案中:

import java.io.*;

public class Main {

    public static void main(String[] args) {
        try {
            // 建立檔案輸出流
            FileOutputStream fos = new FileOutputStream("output.txt");
            // 建立PrintStream物件,將輸出重定向到檔案輸出流
            PrintStream ps = new PrintStream(fos);
            // 將標準輸出流重定向到PrintStream物件
            System.setOut(ps);
            // 輸出內容到檔案
            System.out.println("Hello, World!");
            // 關閉檔案輸出流
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述程式碼中,首先建立一個檔案輸出流,然後建立一個 PrintStream 物件,將輸出重定向到檔案輸出流。接著,使用 System.setOut()方法將標準輸出流重定向到 PrintStream 物件。最後,使用 System.out.println()方法輸出內容到檔案中。


2.5.4 輸入重定向

在 Java 中,可以使用 System.setIn()方法將輸入重定向到指定的輸入流中。下面例項演示瞭如何將輸入重定向到檔案中:

import java.io.*;

public class Main {

    public static void main(String[] args) {
        try {
            // 建立檔案輸入流
            FileInputStream fis = new FileInputStream("input.txt");
            // 將標準輸入流重定向到檔案輸入流
            System.setIn(fis);
            // 建立Scanner物件,從標準輸入流中讀取資料
            Scanner scanner = new Scanner(System.in);
            // 讀取輸入內容
            String input = scanner.nextLine();
            // 輸出讀取的內容
            System.out.println("輸入內容為:" + input);
            // 關閉檔案輸入流
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述程式碼中,首先建立一個檔案輸入流,然後使用 System.setIn()方法將標準輸入流重定向到檔案輸入流。接著,建立一個 Scanner 物件,從標準輸入流中讀取資料。最後,輸出讀取的內容。


2.5.5 管道流

在 Java 中,可以使用 PipedInputStream 和 PipedOutputStream 類來實現管道流。管道流可以在兩個執行緒之間傳遞資料。下面例項演示瞭如何使用管道流:

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {
        // 建立管道輸入流和管道輸出流
        PipedInputStream pis = new PipedInputStream();
        PipedOutputStream pos = new PipedOutputStream(pis);
        // 建立執行緒1,將資料寫入管道輸出流
        Thread writerThread = new Thread(() -> {
            try {
                pos.write("Hello, World!".getBytes());
                pos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        // 建立執行緒2,從管道輸入流中讀取資料
        Thread readerThread = new Thread(() -> {
            try {
                byte[] buffer = new byte[1024];
                int length = pis.read(buffer);
                String message = new String(buffer, 0, length);
                System.out.println("讀取到的資料為:" + message);
                pis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        // 啟動執行緒
        writerThread.start();
        readerThread.start();
    }
}

在上面的示例中,我們建立了兩個執行緒,一個執行緒將資料寫入管道輸出流,另一個執行緒從管道輸入流中讀取資料。當管道輸出流關閉時,管道輸入流也會自動關閉。


2.6 案例:查詢銀行賬戶餘額

2.6.1 需求分析

輸入被查詢的客戶的姓名,輸出該客戶的賬戶餘額。
查詢條件:輸入客戶姓名,按照格式要求輸出賬戶餘額。

2.6.2 設計思路

  1. 定義一個類BankOuery,包含一個main方法。
  2. 在main方法中,使用Scanner類獲取使用者輸入的客戶姓名。
  3. 根據客戶姓名,查詢賬戶餘額,並輸出結果。

2.6.3 程式碼實現

//PorjectNane: SE_java_EXP_E002
package cn.campsg.java.experiment;
import java.util.Scanner;
public class BankQuery {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("請輸入被查詢的客戶的姓名:");
        String name = scanner.nextLine();
        // 根據姓名查詢賬戶餘額
        float money = 8888f;
        System.out.printf("尊敬的客戶:%s\n您的餘額餘額為:%.1f\n", name, money);
    }
}

在上面的示例中,我們使用Scanner類獲取使用者輸入的客戶姓名,然後呼叫System.out.printf()格式化輸出帳戶姓名和餘額,在實際應用中,我們需要根據具體的業務邏輯來實現查詢賬戶餘額的功能。


案例擴充套件
import java.util.Scanner;

public class BankAccount {
    private double balance;

    public BankAccount(double initialBalance) {
        this.balance = initialBalance;
    }

    public synchronized void deposit(double amount) {
        balance += amount;
        System.out.println("存款:" + amount);
        System.out.println("當前餘額:" + balance);
    }

    public synchronized void withdraw(double amount) {
        if (balance >= amount) {
            balance -= amount;
            System.out.println("取款:" + amount);
            System.out.println("當前餘額:" + balance);
        } else {
            System.out.println("餘額不足,無法取款:" + amount);
        }
    }

    public static void main(String[] args) {
        BankAccount account = new BankAccount(1000);
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("請選擇操作:1.存款 2.取款 3.退出");
            int choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("請輸入存款金額:");
                    double depositAmount = scanner.nextDouble();
                    account.deposit(depositAmount);
                    break;
                case 2:
                    System.out.println("請輸入取款金額:");
                    double withdrawAmount = scanner.nextDouble();
                    account.withdraw(withdrawAmount);
                    break;
                case 3:
                    System.exit(0);
                    break;
                default:
        }
        }
    }
}

在這個例子中,我們建立了一個名為BankAccount的類,它有一個balance屬性和一個deposit方法。deposit方法用於存款,它接受一個引數amount,表示存款金額。如果存款金額大於0,則將金額加到balance屬性上,並列印存款成功的資訊;否則,列印存款失敗的資訊。
main方法中,我們建立了一個BankAccount物件account,並使用Scanner類從控制檯讀取使用者輸入。根據使用者的選擇,我們呼叫account物件的deposit方法進行存款操作,或者呼叫account物件的withdraw方法進行取款操作。如果使用者選擇退出,則使用System.exit(0)方法退出程式。

import java.util.Scanner;

public class BankAccount {
    private double balance;

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("存款成功,當前餘額為:" + balance);
        } else {
            System.out.println("存款失敗,存款金額必須大於0");
        }
    }

    public static void main(String[] args) {
        BankAccount account = new BankAccount();
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("請選擇操作:1.存款 2.取款 3.退出");
            int choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("請輸入存款金額:");
                    double depositAmount = scanner.nextDouble();
                    account.deposit(depositAmount);
                    break;
                case 2:
                    System.out.println("請輸入取款金額:");
                    double withdrawAmount = scanner.nextDouble();
                    account.withdraw(withdrawAmount);
                    break;
                case 3:
                    System.exit(0);
                    break;
                default:
            }
        }
}
}

2. 編寫一個Java程式,實現一個簡單的計算器,可以進行加、減、乘、除運算。要求使用者輸入兩個數字和一個運算子,然後輸出運算結果。

import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入第一個數字:");
        double num1 = scanner.nextDouble();
        System.out.println("請輸入第二個數字:");
        double num2 = scanner.nextDouble();
        System.out.println("請輸入運算子(+、-、*、/):");
        String operator = scanner.next();
        double result = 0;
        switch (operator) {
            case "+":
                result = num1 + num2;
                break;
            case "-":
                result = num1 - num2;
                break;
            case "*":
                result = num1 * num2;
                break;
            case "/":
                result = num1 / num2;
                break;
            default:
                System.out.println("無效的運算子");
                return;
        }
        System.out.println("運算結果為:" + result);
    }
}

3. 編寫一個Java程式,實現一個簡單的學生管理系統,要求能夠新增、刪除、修改和查詢學生資訊。學生資訊包括姓名、年齡和成績。

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

public class StudentManagementSystem {
            public static void main(String[] args) {

        }
        }

相關文章