vim可以写java_[数据结构和算法笔记]用vim写Java不是找罪受么

被要求用unix加vim写Java了,你说学生又不是手跟不上脑子,为啥要用vim来浪费时间呢...

因为不熟悉语法,所以昨天写了一下午才大概把一题作业写出来,嘛,算是学了不少东西吧。

ed71d1046d4fd0fb11479e3d07851504.png

25af96b5fdd0d31e26d995c9d1be9e1b.png

6f302e348c5573dabb1fda29bb7cdf1a.png

上面的是题目和输入输出的例子,其实是很傻的一个问题,没啥难度,就是稍微复杂一点,但是作为一个Java新手(特别是基本不记得C和CPP的新手),用vim写还是经常会遇到奇怪的问题的,下面贴一下代码(第一次写这么长的代码):

如果想做这一题的话就先别看(真的很无聊的一个题)

import java.io.*;

import java.util.*;

import java.lang.*;

public class Storage {

public void run() {

Scanner scan = new Scanner(System.in);

int N = scan.nextInt();

int S = scan.nextInt();

int K = scan.nextInt();

int Q = scan.nextInt();

//System.out.println(N+" "+S+" "+K+" "+Q);

Item[] handy = new Item[S];

for (int i = 0; i < S; i += 1) {

handy[i] = new Item(" ", 0);

}

//initialize status of box

Box[] instore = new Box[N];

for (int i = 0; i < N; i += 1) {

instore[i] = new Box(K, (i + 1));

instore[i].ini();

//System.out.println(instore[i].onebox.length);

}

//System.out.println(instore.length);

//Process every line of query

for (int i = 0; i <= Q; i += 1) {

String query = scan.nextLine();

String[] queries = query.split(" ");

if (queries[0].equals("purchase")) {

purchase P = new purchase(S, N, K, handy, queries, instore);

P.process();

}

if (queries[0].equals("deposit")) {

deposit D = new deposit(S, N, K, handy, queries, instore);

D.process();

}

if (queries[0].equals("withdraw")) {

withdraw W = new withdraw(S, N, K, handy, queries, instore);

W.process();

}

if (queries[0].equals("location")) {

location L = new location(S, N, K, handy, queries, instore);

L.process();

}

if (queries[0].equals("valuable")){

valuable V= new valuable(S, N, K, handy, queries, instore);

V.process();

}

}

}

public static void main(String[] args) {

Storage myStorageSystem = new Storage();

myStorageSystem.run();

}

class Box {

int K;

Item[] onebox;

int boxnumber;

public Box(int a, int b) {

K = a;

onebox = new Item[K];

boxnumber = b;

}

public void ini() {

for (int i = 0; i < K; i += 1) {

onebox[i] = new Item(" ", 0);

}

}

}

class Item {

String itemname;

int value;

public Item(String ite, int v) {

itemname = ite;

value = v;

}

}

class purchase {

int S;

int N;

int K;

Item[] handy;

String[] queries;

Box[] instore;

public purchase(int s, int n, int k, Item[] hand, String[] query, Box[] is) {

S = s;

N = n;

K = k;

handy = hand;

queries = query;

instore = is;

}

public void process() {

int flag = 0;

for (int i = 0; i < S; i += 1) {

if (handy[i].itemname.equals(" ")) {

handy[i].itemname = queries[1];

try {

handy[i].value = Integer.parseInt(queries[2]);

} catch (NumberFormatException NFE) {

System.out.println(NFE);

}

flag = 1;

break;

}

}

if (flag == 1) {

System.out.println("item " + queries[1] + " is now being held");

} else {

int red_flag = 0;

for (int i = 0; i < N; i += 1) {

for (int j = 0; j < K; j += 1) {

if (instore[i].onebox[j].itemname.equals(" ")) {

instore[i].onebox[j].itemname = queries[1];

try {

instore[i].onebox[j].value = Integer.parseInt(queries[2]);

} catch (NumberFormatException NFE) {

System.out.println(NFE);

}

System.out.println("item " + queries[1] + " has been deposited to box " + instore[i].boxnumber);

red_flag = 1;

break;

}

}

if (red_flag == 1) {

break;

}

}

}

}

}

class deposit {

int S;

int N;

int K;

int pin = -1;

Item[] handy;

String[] queries;

Box[] instore;

public deposit(int s, int n, int k, Item[] hand, String[] query, Box[] is) {

S = s;

N = n;

K = k;

handy = hand;

queries = query;

instore = is;

}

public void process() {

int redflag = 0;

for (int i = 0; i < N; i += 1) {

for (int j = 0; j < K; j += 1) {

if (instore[i].onebox[j].itemname.equals(queries[1])) {

redflag = 1;

System.out.println("item " + queries[1] + " is already in storage");

break;

}

}

if (redflag == 1) {

break;

}

}

if (redflag == 0) {

int flag = 0;

for (int i = 0; i < S; i += 1) {

if (handy[i].itemname.equals(queries[1])) {

pin = i;

flag = 1;

break;

}

}

if (flag == 0) {

System.out.println("item " + queries[1] + " does not exist");

}

else{

int greenflag = 0;

for (int i = 0; i < N; i += 1) {

for (int j = 0; j < K; j += 1) {

if (instore[i].onebox[j].itemname.equals(" ")) {

instore[i].onebox[j].itemname = queries[1];

instore[i].onebox[j].value = handy[pin].value;

handy[pin].itemname = " ";

handy[pin].value = 0;

System.out.println("item " + queries[1] + " has been deposited to box " + (i + 1));

greenflag = 1;

break;

}

}

if (greenflag == 1) {

break;

}

}

}

}

}

}

class withdraw {

int S;

int N;

int K;

Item[] handy;

String[] queries;

Box[] instore;

public withdraw(int s, int n, int k, Item[] hand, String[] query, Box[] is) {

S = s;

N = n;

K = k;

handy = hand;

queries = query;

instore = is;

}

public void process() {

int redflag = 0;

for (int ln = 0; ln < S; ln += 1) {

if (handy[ln].itemname.equals(queries[1])) {

redflag = 1;

System.out.println("item " + queries[1] + " is already being held");

break;

}

}

if (redflag == 0) {

int flag = 0;

for (int i = 0; i < N; i += 1) {

for (int j = 0; j < K; j += 1) {

if (instore[i].onebox[j].itemname.equals(queries[1])) {

flag = 1;

int greenflag = 0;

for (int ll = 0; ll < S; ll += 1) {

if (handy[ll].itemname.equals(" ")) {

handy[ll].itemname = queries[1];

handy[ll].value = instore[i].onebox[j].value;

instore[i].onebox[j].itemname = " ";

instore[i].onebox[j].value = 0;

greenflag = 1;

break;

}

}

if (greenflag == 1) {

System.out.println("item " + queries[1] + " has been withdrawn");

break;

} else {

System.out.println("cannot hold any more items");

break;

}

}

}

if (flag == 1) {

break;

}

}

if (flag == 0) {

System.out.println("item " + queries[1] + " does not exist");

}

}

}

}

class location {

int S;

int N;

int K;

Item[] handy;

String[] queries;

Box[] instore;

public location(int s, int n, int k, Item[] hand, String[] query, Box[] is) {

S = s;

N = n;

K = k;

handy = hand;

queries = query;

instore = is;

}

public void process() {

int flag = 0;

for (int i = 0; i < S; i += 1) {

if (handy[i].itemname.equals(queries[1])) {

flag = 1;

System.out.println("item " + queries[1] + " is being held");

break;

}

}

int redflag = 0;

if (flag == 0) {

for (int i = 0; i < N; i += 1) {

for (int j = 0; j < K; j += 1) {

if (instore[i].onebox[j].itemname.equals(queries[1])) {

redflag = 1;

System.out.println("item " + queries[1] + " is in box " + (i + 1));

break;

}

}

if (redflag == 1) {

break;

}

}

}

if ((flag == 0) && (redflag == 0)) {

System.out.println("item " + queries[1] + " does not exist");

}

}

}

class valuable {

int S;

int N;

int K;

Item[] handy;

String[] queries;

Box[] instore;

ArrayList alitem = new ArrayList();

ArrayList alvalue = new ArrayList();

public valuable(int s, int n, int k, Item[] hand, String[] query, Box[] is) {

S = s;

N = n;

K = k;

handy = hand;

queries = query;

instore = is;

}

public void process() {

for (int i = 0; i < S; i += 1) {

if (handy[i].itemname.equals(" ")) {

continue;

} else {

alitem.add(handy[i].itemname);

alvalue.add(handy[i].value);

}

}

for (int i = 0; i < N; i += 1) {

for (int j = 0; j < K; j += 1) {

if (instore[i].onebox[j].itemname.equals(" ")) {

continue;

} else {

alitem.add(instore[i].onebox[j].itemname);

alvalue.add(instore[i].onebox[j].value);

}

}

}

int size = alitem.size();

String[] items = (String[]) alitem.toArray(new String[size]);

Object[] svalues = (Object[]) alvalue.toArray();

int[] values= new int[size];

for (int i=0;i

values[i]=Integer.parseInt(String.valueOf(svalues[i]));

}

Item[] owns = new Item[size];

for (int ll = 0; ll < size; ll += 1) {

owns[ll] = new Item(items[ll], values[ll]);

}

Arrays.sort(values);

int max= values[size-1];

int maxvalueitems=0;

for (int ll = 0; ll < size; ll += 1) {

if (owns[ll].value==max){

maxvalueitems+=1;

}

}

String[] maxitems= new String [maxvalueitems];

int counter=0;

for (int ll = 0; ll < size; ll += 1) {

if (owns[ll].value == max) {

maxitems[counter] = owns[ll].itemname;

counter += 1;

}

}

Arrays.sort(maxitems);

System.out.println(maxitems[0]);

}

}

}

最后一个class写的不是很规范,但是通过了10个测试,所以准确性应该没问题。在做这个题的时候遇到了一些问题,先贴一个,后面的等做完剩下两题再写了。

空指针问题

class Item{

String itemname;

int value;

}

Item[] handy = new Item[S];

这样初始化之后的问题是,定义了一个数组,数组的每一个位置都储存了一个Null的位置,其实就是一个空指针,就会报错:

Exception in thread "main" java.lang.NullPointerException

比如我们想初始化一下这个handy:

for (int i=0;i

handy[i].itemname=" ";

handy[i].value=0;

}

就会出现上面的报错,在初始化的时候要每次都new一个item对象,就可以访问了:

for (int i=0;i

handy[i] = new Item();

handy[i].itemname=" ";

handy[i].value=0;

}

今天就是这样,如果对这题有兴趣的可以留言,我可以给你测试的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值