如何使代码更高效/清洁 - USACO培训第一任务

时间:2013-09-13 00:56:54

标签: java

我在USACO培训页面遇到第一个问题时遇到了问题。

任务是从text.in文件中请求两个字符串,将字符串转换为字母的乘积(其中a = 1,b = 2,z = 26),然后看如果数字/ 47的剩余部分彼此相等(如果是,则打印“GO”,如果不是,则打印“STAY”)。

它在我的计算机上运行良好,但是当我发送它时,它会显示

  
    

运行1:执行错误:程序退出,退出状态为“1”。

  
    ------ Data for Run 1 [length=14 bytes] ------
    COMETQ 
    HVNGAT 
    ----------------------------

      Your program printed data to stderr.  Here is the data:
      -------------------
      Exception_in_thread_"main"_java.io.FileNotFoundException:_test.in_(No_such_file_or_directory)
        at_java.io.FileInputStream.open(Native_Method)
        at_java.io.FileInputStream.<init>(FileInputStream.java:106)
        at_java.io.FileInputStream.<init>(FileInputStream.java:66)
        at_java.io.FileReader.<init>(FileReader.java:41)
        at_ride.main(Unknown_Source)

我尝试查看此http://cerberus.delos.com:790/usacoprobfix?a=VjAAvKvQucH,但我无法理解诸如“堆栈使用”或“越界”之类的术语。

它是不接受我的代码的原因是因为它太慢了?我很感激任何帮助解决这个问题。

  /*
ID: Anon
LANG: JAVA
TASK: ride
*/
import java.io.*;
import java.util.*;

class ride
{
  public static void main (String [] args) throws IOException
  {

     //input
     BufferedReader br = new BufferedReader(new FileReader("test.in"));

     //output
     PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out")));

     String nameComet = br.readLine();
     String nameGroup = br.readLine();

     int productComet = 1;
     int productGroup = 1;

     //loop through each letter in word
     for(int i=0; i<nameComet.length(); i++) 
     {
        //sets letter to char letter
        char letter = nameComet.charAt(i);
        //set number of letter to correspondnum
        int numComet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(letter) + 1;
        productComet *= numComet;
     }

     for(int i=0; i<nameGroup.length(); i++) 
     {
        //sets letter to char letter
        char letter = nameGroup.charAt(i);
        //set number of letter to correspondnum
        int numGroup = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(letter) + 1;
        productGroup *= numGroup;
     }

        int modComet = productComet % 47;
        int modGroup = productGroup % 47;

    if (modComet == modGroup)
    {
        out.println("GO");
    }
    else
    {
        out.println("STAY");
    }

     //close everything
     out.close();
     System.exit(0);
}
}

1 个答案:

答案 0 :(得分:1)

您的错误出现在以下几行:

BufferedReader br = new BufferedReader(new FileReader("test.in"));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out")));

您的代码正在尝试从usaco服务器上不存在的文件(“test.in”)中读取。当您将代码提交到网站时,您需要读取与问题名称相同的文件(例如“ride.in”和“ride.out”)。

希望有所帮助!