永发信息网

java座位预定问题,有没有大神

答案:1  悬赏:0  手机版
解决时间 2021-01-11 17:18
java座位预定问题,有没有大神
最佳答案


import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class Kyo
{
private static final String TXT = "booking.txt";

private static final String LINE = System.getProperty("line.separator");

private static String readLine(int line, int count, String file)
{
try
{
Scanner scan = new Scanner(new File(file));
scan.skip("([^" + LINE + "]+[" + LINE + "]+)" + "{" + (line + 1) + "}");
String result = "";
while(count > 0 && scan.hasNextLine())
{
result += scan.nextLine().trim();
if(count > 1)
{
result += LINE;
}
count--;
}
scan.close();
return result;
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
return "";
}

private static void setBestSeat(String[] seat, String tag, String members, int num)
{
int[] seats = new int[0];
int[] indexs = new int[0];
for(int i = 0; i < seat.length; i++)
{
String s = seat[i];
boolean isExisted = s.contains(tag);
if(s.contains(tag))
{
for(int j = i + 1; j < i + num; j++)
{
if(j > seat.length - 1)
{
isExisted = false;
break;
}
String b = seat[j];
if(!b.contains(tag))
{
isExisted = false;
break;
}
}
int[] dest = new int[seats.length + 1];
System.arraycopy(seats, 0, dest, 0, seats.length);
dest[dest.length - 1] = i;
seats = dest;
}
// 是否有足够的连续数组元素(座位数)
if(isExisted)
{
int[] dest = new int[indexs.length + 1];
System.arraycopy(indexs, 0, dest, 0, indexs.length);
dest[dest.length - 1] = i;
indexs = dest;
}
}
String[] ms = members.split("[" + LINE + "]+");
if(indexs.length == 0)
{
indexs = seats;
String tmp = ",";
for(int i = 0; i < ms.length; i++)
{
int rand = (int) (Math.random() * indexs.length);
int ir = indexs[rand];
if(tmp.indexOf("," + ir + ",") == -1)
{
seat[ir] = "Seat " + (ir + 1) + ": " + ms[i];
tmp += ir + ",";
}
else
{
i--;
}
}
}
else
{
int rand = (int) (Math.random() * indexs.length);
int ir = indexs[rand];
for(int k = ir; k < ir + ms.length; k++)
{
seat[k] = "Seat " + (k + 1) + ": " + ms[k - ir];
}
}
}

public static void main(String[] args)
{
String[] seat = {
        "Seat 1: -empty-",
        "Seat 2: -empty-",
        "Seat 3: -empty-",
        "Seat 4: -empty-",
        "Seat 5: -empty-",
        "Seat 6: -empty-",
        "Seat 7: -empty-",
        "Seat 8: -empty-"
};
String[][] booking = new String[0][];
Scanner input = null;
int count = 0;
int number = 0;
try
{
input = new Scanner(new File(TXT));
while(input.hasNextLine())
{
String line = input.nextLine().trim();
if(line.matches("^\d+$"))
{
int num = Integer.parseInt(line);
if(num != seat.length)
{
String result = readLine(count, num, TXT);
setBestSeat(seat, "-empty-", result, num);
}
num = num == seat.length ? 2 : num + 1;
String[][] dest = new String[booking.length + 1][];
System.arraycopy(booking, 0, dest, 0, booking.length);
dest[dest.length - 1] = new String[num];
booking = dest;
booking[number][0] = line;
number++;
}
count++;
}
booking[0][1] = Arrays.toString(seat).replaceAll("[\[\]]", "");
input.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
for(int i = 0; i < seat.length; i++)
{
System.out.println(seat[i]);
}
System.out.println(Arrays.deepToString(booking));
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
托托到精河多少公里
中国沦为半封建半殖民地社会是从________开始
99版一元纸单有收藏价值吗?
见习魔法师的等级
the zip puller s/b in toilet shape 中
勐往离景洪多远? 在哪
万泰阳光城怎么样?好不好?值不值得买?
离沐倾城 winnie° 什么意思
互联网自媒体时代,哪个自媒体比较好赚钱
2018年盐城的底薪多少
多喜爱广告背景音乐叫什么
南瓜烂了,切除后还能食用吗?
偶然间看到了电梯里的这个,这是个直达5楼的
一百六十万千克等于多少公斤
鸸鹋肉能吃吗
推荐资讯
单选题下列属于支原体细胞中的生物膜的是A.荚
华为P20 Pro售价多少 性能怎么样
为什么高压无缝钢管液压试验压力最高20MPA
求职达人支招:如何在面试时打动HR
异地可以开三年无重大责任事故证明吗
人类正积极开发和利用太阳能,如太阳能热水器
我儿子马上就七岁了手突然脱皮是怎么回
最囧游戏2第3关扑克顺序是什么 从小到大
0.58×28 2.8 3.2×2.8简短算
2017年12月PMP考试成绩可以查了吗?怎么算通
韩国腌白萝卜怎么做啊???麻烦哪位大虾指点
Q名可以叫什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?