有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:在2D数组中搜索字符串并显示数据

我正在创建一个程序,作为给定单词的翻译。我用我正在使用的数据创建了一个文本文件,将其读入一个2D数组(第0列为英语,第1列为翻译,总共16行)。我会提示用户输入一个字符串,并将该字符串、2D和一个空白字符串传递给我的翻译方法(名为turnKlingon)。我使用字符串标记器来挑选特定的单词。我的问题是,我不知道如何在第0列中搜索我的2D数组,只打印第1列的翻译单词

import java.util.*;
import java.io.*;
public class project9
{
    public static void main(String[] args)
    throws java.io.IOException 
    {
        System.out.println("Klingon Translator");
        System.out.println();
        System.out.println();

        String userString = " ";
        userString = loadUserString();

        String[][] translate = new String[16][2];
        loadTranslateString(translate);

        String Klingon = " ";
        turnKlingon(Klingon, userString, translate);




        }

        public static String loadUserString()
        {
           Scanner input = new Scanner(System.in); 
           String s1 = " ";
           System.out.println("Please enter a sentence that you would like translated to Klingon: ");
           s1 = input.nextLine().trim().toUpperCase();
           return s1;

    }

        public static void loadTranslateString(String[][] translate)
        throws java.io.IOException 
        {
          String filName = " ";       
          filName = "C:\\tmp\\transKling.txt";       
          Scanner input = new Scanner(new File(filName));       
          for (int row = 0; row < translate.length; row++)       
          {           
               for (int col = 0; col < translate[row].length; col++)               
                    translate[row][col] = input.nextLine();       
          }       
          input.close();    

    }

       public static void turnKlingon(String Klingon, String userString, String[][] translate)
       {
           String userStringPassed = userString;
           String[][] translatePassed = translate;
           String s2 = " ";
           StringTokenizer st = new StringTokenizer(userStringPassed);
           int numberOfWords = st.countTokens();
           System.out.println("Number of Tokens: "+ numberOfWords);
           int counter = 1;


       while (counter <= numberOfWords)
       {
        s2 = st.nextToken();  //string tokenizer
        System.out.print(s2 + "_"); //string tokenizer



      for(int r = 0; r < translate.length; r++) 
      { 
          for(int c = 0; c < translate[r].length; c++) 
          {
           if (translate[r][c].compareTo(s2) == 0)
           {
               translate[0] = translate[1];

            }

          } 
          System.out.println(translate[0] + "," + translate[1]); 



        counter++;   //string tokenizer                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
       }//end while

     }
   }

}

共 (1) 个答案

  1. # 1 楼答案

    在花了几个小时处理这些代码之后,我终于解决了自己的问题。我还在main方法中添加了一个while-true循环,允许用户多次翻译,还提供了一个选项,可以翻译成另一种语言(德语),尽管我在回答中省略了该方法

    import java.util.*;
    import java.io.*;
    public class project9
    {
        public static void main(String[] args)
        throws java.io.IOException 
        {
            Scanner input = new Scanner(System.in);
    
            System.out.println("English to Klingon/German Translator");
            System.out.println();
            System.out.println();
    
         while (true)
         {
            int again = 999;
            int language = 999;
            String userString = " ";
            userString = loadUserString();
    
            String[][] translate = new String[16][2];
            loadTranslateString(translate);
    
            System.out.println("Would you like to translate to Klingon or German? \n Press 1 for Klingon: \n Press 2 for German: ");
            language = input.nextInt();
    
            if (language == 1)
            {        
            turnKlingon(userString, translate);
            }
            else if (language == 2)
            {
            turnGerman(userString, translate);
            }
            else 
            {
                System.out.println("Invalid input");
            }
    
            System.out.println();
            System.out.println();
            System.out.println("Would you like to translate another sentence? \n  Press 1 for yes or 0 for no: ");
            again = input.nextInt();
    
            if (again == 0)
            {
                System.out.println("Goodbye!");
                break;
            }
            else if (again == 1)
            {
                continue;
            }
    
         }
        }
    
            public static String loadUserString()
            {
               Scanner input = new Scanner(System.in); 
               String s1 = " ";
               System.out.println("Please enter a sentence that you would like translated: ");
               s1 = input.nextLine().trim().toUpperCase();
               return s1;
    
        }
    
            public static void loadTranslateString(String[][] translate)
            throws java.io.IOException 
            {
              String filName = " ";       
              filName = "C:\\tmp\\transKling.txt";       
              Scanner input = new Scanner(new File(filName));       
              for (int row = 0; row < translate.length; row++)       
              {           
                   for (int col = 0; col < translate[row].length; col++)               
                        translate[row][col] = input.nextLine();       
              }       
              input.close();    
    
        }
    
           public static void turnKlingon(String userString, String[][] translate)
           {
               String userStringPassed = userString;
               String[][] translatePassed = translate;
               String s2 = " ";
               StringTokenizer st = new StringTokenizer(userStringPassed);
               int numberOfWords = st.countTokens();
               System.out.println();
               System.out.println("Any words that cannot be directly \n translated will remain in English");
               System.out.println("____________________________________");
               System.out.println();
               System.out.print("Translation: ");
               int counter = 1;
               boolean found = false;
               int translateCounter = 0;
    
    
           while (counter <= numberOfWords)
           {
            s2 = st.nextToken();  //string tokenizer
             //string tokenizer
    
    
    
          for(int r = 0; r < 16; r++) 
          { 
              for(int c = 0; c < 18; c++) 
              {
                  found = false;
    
                  if (translateCounter == 16)
                  {
    
                      System.out.print(s2+ " ");
                      translateCounter = 0;
                      break;
                  }
                  else if (translate[r][0].compareTo(s2) == 0)
                  {
                   found = true;  
                  }
                  else if (translate[r][0].compareTo(s2) != 0)
                  {
                    found = false;
                    r++;
                    c = -1;;
                    translateCounter++;
                    continue;
    
                  }
    
    
                if (found == true)
                {
    
                System.out.print(translate[r][1]+ " ");
                translateCounter = 0;
                c = -1;
                r = -1;
                break;
               }
    
    
             }  
    
            counter++;//string tokenizer 
    
    
            break;
           }//end while
    
         }
       }