永发信息网

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

答案:1  悬赏:0  手机版
解决时间 2021-01-11 17:18
  • 提问者网友:最美的风景
  • 2021-01-10 20:05
java座位预定问题,有没有大神
最佳答案
  • 五星知识达人网友:第四晚心情
  • 2021-01-10 20:10


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));
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯