簡體   English   中英

我在哪里放置console.next()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM