[英]Where do I put the console.next( )?
這段代碼遍歷了幾個文件,以查找您鍵入的任何名稱的流行度和含義。我幾乎沒有啟動它的圖形部分,所以這就是drawGraph方法看起來很奇怪的原因。 我想知道如何獲取它,以便用戶只需鍵入一次名稱。 我知道有String originalName = console.next(); 在nameToLowerCase的第一行中是問題,我只是不知道將它放在哪里。 我嘗試過將它放在簡介中,但是那沒有用,因為那樣我就必須使簡介與名稱相等,並且每當我想要該名稱時,整個簡介都會再次重復。 謝謝,這是我的代碼和輸出:輸出:
This program allows you to search through the
data from the Social Security Administration
to see how popular a particular name has been
since 1890
Name: aaron
Aaron f 0 0 0 0 0 0 0 0 0 883 0 0 0
aaron
aaron
aaron
AARON m English, Biblical From the Hebrew name ??????? ('Aharon) which is most likely of unknown Egyptian origin.
aaron
aaron
aaron
aaron
aaron
aaron
aaron
aaron
aaron
aaron
aaron
(這使用戶一遍又一遍地輸入名稱)。 碼:
import java.util.*;
import java.io.*;
import java.awt.*;
public class BabyNames{ //ADD COMMENTS
public static final int STARTINGYEAR = 1890;
public static final int WIDTH = 60;
public static final int HEIGHT = 30;
public static void main(String[] args) throws FileNotFoundException{
Scanner console = new Scanner(System.in);
DrawingPanel panel = new DrawingPanel(780,560);
Graphics g = panel.getGraphics();
Scanner nameFile = new Scanner(new File("names.txt"));
Scanner meaningsFile = new Scanner(new File("meanings.txt"));
Scanner nameFile2 = new Scanner(new File("names2.txt"));
intro();
if(STARTINGYEAR == 1890){
findingStatistics(console,nameFile);
drawGraph(g);
}
else{
findingStatistics(console, nameFile2);
drawGraph(g);
}
findingStatistics(console,meaningsFile);
}
public static void intro(){
System.out.println("This program allows you to search through the");
System.out.println("data from the Social Security Administration");
System.out.println("to see how popular a particular name has been");
System.out.println("since 1890" );
System.out.println();
System.out.print("Name: ");
}
public static String nameToLowerCase(Scanner console){
String originalName = console.next();
String name = "" ;
int lengthOfName = originalName.length();
String beginingOfName = originalName.substring(0,1).toUpperCase();
String endOfName = originalName.substring(1,lengthOfName).toLowerCase();
name = beginingOfName + endOfName;
return name;
}
public static String findingStatistics(Scanner console, Scanner data){
String nameFinal = nameToLowerCase(console);
boolean goesThroughOnce = false; //
String statistics = "";
String currWord = "";
String currLine = "";
while (data.hasNext() && goesThroughOnce == false){
currLine = data.nextLine();
Scanner lineBeingRead = new Scanner(currLine); //make other scanners?? for each file
currWord = lineBeingRead.next(); //
if (currWord.equals(nameFinal) || currWord.equals(nameFinal.toUpperCase())){ //
statistics = currLine;
goesThroughOnce = true;
System.out.println(statistics);
}
else{
}
}
return statistics;
}
public static void drawGraph(Graphics g){
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0,0,780,30);
g.fillRect(0,530,780,30);
}
}
如果我理解正確,則希望用戶僅提供一次搜索詞。
一種解決方案是稍微重構。 只需在類級別聲明nameFinal
變量,並在調用intro()
之后讀取該變量的輸入一次。
看起來像這樣:
import java.util.*;
import java.io.*;
import java.awt.*;
public class BabyNames{ //ADD COMMENTS
public static final int STARTINGYEAR = 1890;
public static final int WIDTH = 60;
public static final int HEIGHT = 30;
// CLASS LEVEL VAR TO HOLD THE SEARCH TERM
private static String nameFinal;
public static void main(String[] args) throws FileNotFoundException{
Scanner console = new Scanner(System.in);
DrawingPanel panel = new DrawingPanel(780,560);
Graphics g = panel.getGraphics();
Scanner nameFile = new Scanner(new File("names.txt"));
Scanner meaningsFile = new Scanner(new File("meanings.txt"));
Scanner nameFile2 = new Scanner(new File("names2.txt"));
intro();
// READ THE SEARCH HERE ONLY ONCE
nameFinal = nameToLowerCase(console);
if(STARTINGYEAR == 1890){
findingStatistics(console,nameFile);
drawGraph(g);
}
else{
findingStatistics(console, nameFile2);
drawGraph(g);
}
findingStatistics(console,meaningsFile);
}
public static void intro(){
System.out.println("This program allows you to search through the");
System.out.println("data from the Social Security Administration");
System.out.println("to see how popular a particular name has been");
System.out.println("since 1890" );
System.out.println();
System.out.print("Name: ");
}
public static String nameToLowerCase(Scanner console){
String originalName = console.next();
String name = "" ;
int lengthOfName = originalName.length();
String beginingOfName = originalName.substring(0,1).toUpperCase();
String endOfName = originalName.substring(1,lengthOfName).toLowerCase();
name = beginingOfName + endOfName;
return name;
}
public static String findingStatistics(Scanner console, Scanner data){
// NOW THE nameFinal VAR ALREADY HAS A VALUE
boolean goesThroughOnce = false; //
String statistics = "";
String currWord = "";
String currLine = "";
while (data.hasNext() && goesThroughOnce == false){
currLine = data.nextLine();
Scanner lineBeingRead = new Scanner(currLine); //make other scanners?? for each file
currWord = lineBeingRead.next(); //
if (currWord.equals(nameFinal) || currWord.equals(nameFinal.toUpperCase())){ //
statistics = currLine;
goesThroughOnce = true;
System.out.println(statistics);
}
else{
}
}
return statistics;
}
public static void drawGraph(Graphics g){
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0,0,780,30);
g.fillRect(0,530,780,30);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.