【问题标题】:Where do I put the console.next( )?我应该把 console.next() 放在哪里?
【发布时间】:2015-01-03 22:09:54
【问题描述】:

这段代码查看了几个文件,以查找您输入的任何名称的流行度和含义。我几乎没有开始它的图形部分,所以这就是 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);
  }
}

【问题讨论】:

    标签: java file graphics static console


    【解决方案1】:

    如果我理解正确,您希望用户只需提供一次搜索词。

    一种解决方案是稍微重构。只需在类级别声明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);
      }
    }
    

    【讨论】:

    • 我应该添加什么作为“// 在这里只阅读一次”?
    • 没什么,评论在解释下一行发生了什么。
    • 我是初学者,您添加的内容是否称为“数组”?我不允许在这个作业中使用它们,我不知道它们是什么。
    • 不,这不是数组。它只是类级别的变量(而不是像以前那样在方法级别上运行)。
    • 如果它解决了问题,您应该接受答案以表明问题已得到回答。
    猜你喜欢
    • 2020-09-30
    • 2016-08-25
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2017-11-30
    • 2016-12-21
    • 2015-02-08
    相关资源
    最近更新 更多