嘿伙计们一直试图让我的代码工作,但是当我运行它时,我的屏幕上没有任何东西被打印出来。我希望用户输入课程代码,然后显示课程名称。我想使用HashMap来做到这一点,但经过一些挣扎之后,我想在这里提出一些建议。
choices
文本文件样本(只需复制并粘贴到记事本):
ITE221数据库管理系统
ITE222 Web Development I Pre:ITE221 ITE232
ITE223云技术前:ITE222
ITE224移动应用程序开发I Pre:ITE 222
答案 0 :(得分:5)
您无法将两个String
变量与==
运算符进行比较,您必须使用equals()
。
还有其他不同的错误,例如" line = read.readLine()"在while
循环内部和course_info.get(courseName)
作为你应该使用密钥来获取HashMap
中的值,而不是获取密钥的值。< / p>
while ((line = read.readLine()) != null) {
// line = read.readLine(); // no need for this
data = line.split(" ");
String courseID = data[0];
String courseName = data[1];
course_info.put(courseID, courseName);
if (courseCode.equals(courseID)) { // correct comparation between String variables
System.out.println(course_info.get(courseID)); // the hashmap retreives the right value now
}
}
如果你想在Id之后输出所有字符串,你只需添加一些非常容易的东西,比如
data = line.split(" ");
String courseID = data[0];
StringBuilder sb = new StringBuilder();
for (int i = 1; i < data.length; i++) {
sb.append(data[i]);
if (i < data.length - 1) {
sb.append(" ");
}
}
String courseName = sb.toString();
答案 1 :(得分:3)
您的代码中存在3个主要问题。
第一期: -
我知道,您已在代码中添加了多个readLine
while(((line = read.readLine()) != null))
{
line = read.readLine(); // No need for this.
第二期: - 你应该使用String equal method
if(courseCode==courseID) // this is not good, as it's object comparsion.
应使用以下代码。它将比较字符串值。
if( courseCode.equals(courseID))
第3期: - 您没有使用右键从hashmap获取元素。使用CourseID
if (courseCode.equals(courseID)) {
System.out.println(course_info.get(courseID));
}
这是适合您的完整计划。这可以进一步优化。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class reading_a_file {
static void pull_info(String courseCode) throws IOException {
BufferedReader read = new BufferedReader(new FileReader("CourseSample.txt"));
Map<String, String> course_info = new HashMap<String, String>();
String line;
String[] data;
while ((line = read.readLine()) != null) {
data = line.split(" ");
String courseID = data[0];
String courseName = data[1];
course_info.put(courseID, courseName);
if (courseCode.equals(courseID)) {
System.out.println(course_info.get(courseID));
}
}
}
public static void main(String[] args) throws IOException {
Scanner console = new Scanner(System.in);
String course_code;
System.out.println("--------------------------------------------------");
System.out.println("Welcome to text file formatter by XM21");
System.out.println("--------------------------------------------------");
System.out.println("");
System.out.println("Please enter course id to see description (-1 to exit):");
System.out.println("CourseCode:");
course_code = console.nextLine();
pull_info(course_code);
}
}
答案 2 :(得分:2)
此代码中有一些错误可能导致此问题。
1)您已连续两次致电line = read.nextLine()
,因此您只需查看每一行。
2)你的大多数课程名称中都有一个空格 - 这意味着即使你在搜索过程中碰巧登上了你想要的课程,你也只会打印出课程名称的第一个单词。
3)字符串应与equals或equalsIngnoreCase进行比较 - 而不是&#34; ==&#34;用于其他比较的标志。
4)扫描仪是一种资源 - 记得关闭它!
5)打印Map的值时 - 使用带键的get(key),而不是值。
您可以通过更改以下内容来改进代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class reading_a_file {
static void pull_info(String courseCode) throws IOException {
BufferedReader read = new BufferedReader(new FileReader("CourseSample.txt"));
Map<String, String> course_info = new HashMap<String, String>();
String line;
String[] data;
while ((line = read.readLine()) != null) {
data = line.split(" ");
String courseID = data[0];
String courseName = line.substring(line.indexOf(" ")+1);
course_info.put(courseID, courseName);
if (courseCode.equalsIgnoreCase(courseID)) {
System.out.println(courseName);
}
}
}
public static void main(String[] args) throws IOException {
Scanner console = new Scanner(System.in);
String course_code;
System.out.println("--------------------------------------------------");
System.out.println("Welcome to text file formatter by XM21");
System.out.println("--------------------------------------------------");
System.out.println();
System.out.println("Please enter course id to see description (-1 to exit):");
System.out.println("CourseCode:");
course_code = console.nextLine();
pull_info(course_code);
console.close();
}
}
答案 3 :(得分:2)
不要使用&#39; ==&#39;用于比较String实例的运算符。这仅检查两个String实例是否共享相同的引用。 替换&#39; ==&#39;对于equals()方法。
courseID.equals(courseCode)
答案 4 :(得分:1)
使用“courseCode.equals(courseID)”而不是“courseCode == courseID”。 “==”比较引用,它可用于字符串文字,而不是用于创建为“new String()”的字符串,可能String.split()为您提供为每个创建的“new String()”字符串数组字。将字符外壳放入地图时也要小心。
答案 5 :(得分:1)
除了已经指出的问题之外,您很可能必须提供该文件的完整路径。
BufferedReader read = new BufferedReader( new FileReader("CourseSample.txt"));
这样的事情
BufferedReader br = new BufferedReader(new FileReader("Drive/Folder/User/Desktop/file.txt"));