JAVA控制台输入,算法题输入问题

这篇博客介绍了如何使用Java的Scanner类从标准输入读取字符串并将其转换为整数数组。首先,通过substring和split方法处理输入的逗号分隔字符串,然后使用parseInt将每个子字符串转换为整数。此外,还展示了如何读取二维数组,通过双重循环按行读取并存储每个整数。这些方法在处理用户输入和数组初始化时非常实用。
摘要由CSDN通过智能技术生成

1 输入字符串 netLine, 整数nextInt, Long型 nexLong

将字符串[1,2,3,4,5,6,7,8,9],变为整数数组输入


 Scanner sc = new Scanner(System.in);
        String str = sc.next();

        String substr = str.substring(1, str.length() - 1);

        String[] numsStr = substr.split(",");//字符串数组接收分割的单个字符
        int[] numsInt = new int[numsStr.length];//创建一个新的整数数组,用于接收

        for (int i = 0; i < numsStr.length; i++) {
            numsInt[i] = Integer.parseInt(numsStr[i]);//将字符串转换为整数型
        }

2 输入二维数组

import java.util.Scanner;
import java.util.Stack;
public class solution{
	public static void main(String[] args){
 		Scanner sc=new Scanner(System.in);
 		// 行数
		int row = sc.nextInt();
		// 列数
		int column = sc.nextInt();
		int[][]matrix=new int[r][c];
 		for(int i=0;i<row;i++){
			for(int j=0;j<column;j++){
				matrix[i][j]=scan.nextInt();
			}
		// 输出二维数组
        System.out.println(Arrays.deepToString(ints));
		}
    }
}
好的,下面是Java实现SJF算法的代码示例,可以自行从控制台输入数据: ```java import java.util.*; public class SJF { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入进程数:"); int n = sc.nextInt(); int[] pid = new int[n]; // 进程ID int[] arriveTime = new int[n]; // 到达时间 int[] serviceTime = new int[n]; // 服务时间 int[] startTime = new int[n]; // 开始时间 int[] finishTime = new int[n]; // 完成时间 int[] turnaroundTime = new int[n]; // 周转时间 double[] weightTurnaroundTime = new double[n]; // 带权周转时间 for (int i = 0; i < n; i++) { System.out.print("请输入第" + (i + 1) + "个进程的信息(进程ID 到达时间 服务时间):"); pid[i] = sc.nextInt(); arriveTime[i] = sc.nextInt(); serviceTime[i] = sc.nextInt(); } // 按照到达时间排序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (arriveTime[j] > arriveTime[j + 1]) { int temp1 = pid[j]; pid[j] = pid[j + 1]; pid[j + 1] = temp1; int temp2 = arriveTime[j]; arriveTime[j] = arriveTime[j + 1]; arriveTime[j + 1] = temp2; int temp3 = serviceTime[j]; serviceTime[j] = serviceTime[j + 1]; serviceTime[j + 1] = temp3; } } } int[] finish = new int[n]; // 记录每个进程的完成时间 int currentTime = 0; // 当前时间 int index = 0; // 记录当前已经服务完的进程数 while (index < n) { int minServiceTime = Integer.MAX_VALUE; int minIndex = -1; // 从尚未服务的进程中选择服务时间最短的 for (int i = 0; i < n; i++) { if (finish[i] == 0 && serviceTime[i] < minServiceTime && arriveTime[i] <= currentTime) { minServiceTime = serviceTime[i]; minIndex = i; } } if (minIndex == -1) { currentTime++; } else { startTime[minIndex] = currentTime; finishTime[minIndex] = currentTime + serviceTime[minIndex]; finish[minIndex] = 1; index++; currentTime = finishTime[minIndex]; } } // 计算周转时间和带权周转时间 for (int i = 0; i < n; i++) { turnaroundTime[i] = finishTime[i] - arriveTime[i]; weightTurnaroundTime[i] = (double) turnaroundTime[i] / serviceTime[i]; } // 输出结果 System.out.println("进程ID\t到达时间\t服务时间\t开始时间\t完成时间\t周转时间\t带权周转时间"); for (int i = 0; i < n; i++) { System.out.println(pid[i] + "\t\t" + arriveTime[i] + "\t\t" + serviceTime[i] + "\t\t" + startTime[i] + "\t\t" + finishTime[i] + "\t\t" + turnaroundTime[i] + "\t\t" + weightTurnaroundTime[i]); } } } ``` 注意:该代码实现的是非抢占式SJF算法,即一个进程一旦开始执行,就会一直执行到完成。如果需要实现抢占式SJF算法,需要对代码进行相应修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值