关于实现键盘录入的两种方式

方式一:创建Scanner方法
执行步骤:
1、创建键盘录入对象
2、读取输入字符(有多种读取方式)
3、如果要让键盘持续输入的话,需要用Scanner对象的.hasNext()方法做判断。

代码如下:

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);           //创建键盘录入对象s
        while(s.hasNext()){            
        	String num = s.nextLine();                //获取输入数据值             
            System.out.println(num);               
        }                    
    }      
}

方式二:BufferedReader的readLine方法
执行步骤:
1、因为Reader是专用于读取字符流的,而键盘录入System.in是字节流,故需要首先创建转换流对象InoutStreamReader。
2、创建BufferedReader对象,将输入放进到缓冲区。
3、读取字符。(只能使用readLine()方法)
4、如果要让键盘持续输入的话,需要每次都判断读取的字符是否为空。

代码如下:

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

public class Main{
    public static void main(String[] args) throws IOException {
    	InputStreamReader s1 = new InputStreamReader(System.in); //创建一个转换流对象,将字节流转换为字符流
        BufferedReader s = new BufferedReader(s1);               //创建BufferedReader对象,将输入读进缓存           
        String num = s.readLine();
        while(num != null){
        	System.out.println(num);
        	num = s.readLine();
        }                      
    }      
}

通过上述对比,可以很明显的看出Scanner方法优于BufferedReader方法。使用时用Scanner方法即可。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是C语言实现最近最久未使用和最少使用置换算法的代码,包括从文本文件读入页面号数据和物理块数以及从键盘录入页面号数据和物理块数两种情况。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PAGE_NUM 1000 #define MAX_BLOCK_NUM 100 int page_table[MAX_PAGE_NUM][2]; // 第一列存放页面号,第二列存放物理块号 // 从文本文件读入页面号数据和物理块数 void read_data(char* filename, int* page_num, int* block_num) { FILE* fp = fopen(filename, "r"); if (!fp) { printf("文件打开失败!\n"); exit(1); } fscanf(fp, "%d%d", page_num, block_num); // 读入页面数和物理块数 int i; for (i = 0; i < *page_num; i++) { fscanf(fp, "%d", &page_table[i][0]); // 读入页面号 page_table[i][1] = -1; // 初始化物理块号为-1,表示未分配 } fclose(fp); } // 从键盘录入页面号数据和物理块数 void input_data(int* page_num, int* block_num) { printf("请输入页面数和物理块数:"); scanf("%d%d", page_num, block_num); printf("请输入页面号:"); int i; for (i = 0; i < *page_num; i++) { scanf("%d", &page_table[i][0]); page_table[i][1] = -1; } } // 最近最久未使用(LRU)算法 int lru_replace(int page_num, int block_num) { int block[block_num]; // 物理块访问时间戳 memset(block, 0, sizeof(block)); // 初始化为0 int i, j, min = block[0], index = 0; for (i = 0; i < page_num; i++) { int page = page_table[i][0]; int block_index = page_table[i][1]; block[block_index] = i + 1; // 更新物理块访问时间戳 if (block[block_index] < min) { // 找到最久未使用的物理块 min = block[block_index]; index = block_index; } } return index; // 返回要替换的物理块号 } // 最少使用(LFU)算法 int lfu_replace(int page_num, int block_num) { int count[page_num]; // 页面访问次数 memset(count, 0, sizeof(count)); // 初始化为0 int i, j, min = count[0], index = 0; for (i = 0; i < page_num; i++) { int page = page_table[i][0]; int block_index = page_table[i][1]; count[page]++; // 更新页面访问次数 if (count[page] < min) { // 找到最少使用的页面 min = count[page]; index = block_index; } } return index; // 返回要替换的物理块号 } // 将选择的页面替换到物理块,并将页面映射信息更新到页表 void replace_page(int page, int index) { int i; for (i = 0; i < MAX_PAGE_NUM; i++) { if (page_table[i][1] == index) { // 找到要替换的页面 page_table[i][0] = page; // 更新页面号 break; } } } int main() { int page_num, block_num; printf("请选择数据输入方式:\n"); printf("1. 从文本文件读入\n"); printf("2. 从键盘录入\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: read_data("data.txt", &page_num, &block_num); break; case 2: input_data(&page_num, &block_num); break; default: printf("输入有误!\n"); exit(1); } int i, j; for (i = 0; i < page_num; i++) { int page = page_table[i][0]; int block_index = -1; for (j = 0; j < block_num; j++) { if (page_table[i][1] == j) { // 页面已经在物理块 block_index = -1; break; } if (page_table[i][1] == -1) { // 页面还未分配物理块 block_index = j; break; } } if (block_index == -1) { // 页面已经在物理块 continue; } int index; if (i < block_num) { // 物理块数大于等于页面数,直接分配 index = i; } else { // 物理块数小于页面数,使用置换算法选择要替换的页面 //index = lru_replace(page_num, block_num); index = lfu_replace(page_num, block_num); replace_page(page, index); } page_table[i][1] = index; // 更新页面映射信息 } printf("页面号\t物理块号\n"); for (i = 0; i < page_num; i++) { printf("%d\t%d\n", page_table[i][0], page_table[i][1]); } return 0; } ``` 以上代码,我们首先定义了一个二维数组`page_table`来存储页面和物理块的映射关系。然后,通过`read_data()`函数从文本文件读入页面号数据和物理块数,或者通过`input_data()`函数从键盘录入页面号数据和物理块数。接下来,我们使用`lru_replace()`和`lfu_replace()`函数来选择要替换的页面。最后,我们使用`replace_page()`函数将选择的页面替换到物理块,并将页面映射信息更新到页表。 在主函数,我们首先根据用户的选择使用`read_data()`或`input_data()`函数读入数据,然后使用`for`循环遍历所有页面,根据页面是否已经在物理块和物理块是否已经全部分配来决定是否需要进行页面置换。最后,我们输出所有页面的页面号和物理块号,以验证程序的正确性。 希望这份代码可以帮助你理解最近最久未使用和最少使用置换算法的实现过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值