gpt4 book ai didi

java - 在 Java 中打开文件时遇到问题

转载 作者:行者123 更新时间:2023-11-29 06:19:54 25 4
gpt4 key购买 nike

我正在尝试用 Java 打开这个文件,我想知道我做错了什么。 in 文件与我的 Java 文件位于同一目录中,但我试图同时使用 netbeans 和 eclipse 打开它,但它给出了一个文件未找到异常。谁能帮我打开这个文件并从中读取。我真的是 java 文件的新手。这是代码

 import java.util.*;
import java.io.*;

public class Practice
{

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


FileReader fin = new FileReader("anagrams.in");
BufferedReader br = new BufferedReader(fin);



System.out.println(fin);


String string = "Madam Curie";
String test = "Radium came";

string = string.toLowerCase();
test = test.toLowerCase();

string = string.replaceAll("[^a-zA-Z0-9]+", "");
test = test.replaceAll("[^a-zA-Z0-9]+", "");

char[] array = string.toCharArray();
char[] array2 = test.toCharArray();

boolean flag = false;
HashMap hm = new HashMap();


for(int i = 0; i < array.length; i++)
{
hm.put(array[i], array[i]);
}

for(int i = 0; i < array2.length; i++)
{
if(hm.get(array2[i]) == null || test.length() != string.length())
{
flag = false;
i = array2.length;
}
else
{
flag = true;
}

}

System.out.println(flag);
}

}

最佳答案

一些提示:

  1. 遵守正确的代码缩进
    • 如果您使用的是像 Eclipse 这样的 IDE,它可以自动为您更正缩进
  2. 培养调试本能
    • 尝试获取当前工作目录,并列出其中的所有文件
  3. 重构重复代码
    • 像您一样编写成对的语句应该立即引起危险信号
  4. Effective Java 第二版
    • 第 23 条:不要在新代码中使用原始类型
    • 第 52 条:通过接口(interface)引用对象
    • 项目 46:比起传统的 for-each 循环更喜欢 for循环
  5. 使用合理的变量名

关于 2,尝试这样的事情:

public static void listDir() {
File current = new File(".");
System.out.println(current.getAbsolutePath());
for (String filename : current.list()) {
System.out.println(filename);
}
}

然后在你的main , 只需调用 listDir在其他一切之前,看看您是否从正确的目录运行应用程序,以及是否有 "anagrams.in"在目录中。请注意,某些平台区分大小写。

关于 3 和 4,考虑使用这样的辅助方法:

static Set<Character> usedCharactersIn(String s) {
Set<Character> set = new HashSet<Character>();
for (char ch : s.toLowerCase().toCharArray()) {
set.add(ch);
}
return set;
}

注意如何 Set<E> 使用而不是 Map<K,V> .查看其余代码,您似乎实际上并不需要映射,而是某种类型的集合(稍后会详细介绍)。

然后你可以在 main 中有这样的东西,这使得逻辑非常可读:

    String s1 = ...;
String s2 = ...;

boolean isNotQuiteAnagram = (s1.length() == s2.length()) &&
usedCharactersIn(s1).containsAll(usedCharactersIn(s2));

请注意现在变量的命名方式非常合理,突出了它们的作用。另请注意,此逻辑并不能完全确定 s1s2 的变位词(考虑例如 "abb""aab" ),但这实际上是您正在做的。

因为这看起来像是家庭作业,所以我会把它留给你来尝试找出两个字符串何时是变位词。

另见

相关问题

关于java - 在 Java 中打开文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3580623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com