2017-04-06 79 views
0

我完全停留在如何将输出写入输出文件。我在下面提供了一些信息,希望能让我更清楚。感谢任何能够帮助我的人。如何将数组写入文件?

当1234是输入(我需要这被写入到txt文件)输出:

Your original number was: 
1234 
The reversed digits are: 
4321 
The even digits are: 
2 4 
The odd digits are: 
1 3 

什么目前正在写入TXT文件:

Your original number was: 
1234 

这里是我的代码现在:

import java.util.Scanner; 
    import java.io.*; 

    public class order { 

    //Input validation. Allows any integer greater than 0. Any number starting 
    with 0 is invalid. 

    private static void validate(Scanner input) { 

     String userEntry;  

     System.out.println("Please enter a positive integer greater than 0."); 
     userEntry = input.nextLine(); 

     while (!userEntry.matches("^[1-9][0-9]*$")) { 
      System.out.println("Invalid number. Try again"); 
      userEntry = input.nextLine(); 
     } 

     try { 
      FileWriter writer = new FileWriter("outDataFile.txt", true); 
      PrintWriter outputfile = new PrintWriter(writer); 

      outputfile.println("Your original number was: "); 
      outputfile.println(userEntry); 
      System.out.println("Your original number was: "); 
      System.out.println(userEntry); 

      System.out.println("The reversed digits are: "); 
      reverse (input, userEntry); 
      System.out.println(); 

      System.out.println("The even digits are: "); 
      even (input, userEntry); 
      System.out.println(); 

      System.out.println("The odd digits are: "); 
      odd (input, userEntry); 
      System.out.println(); 

      } catch (IOException e){    
     }    
    } 

    //Reverses the order of digits. 

    public static void reverse(Scanner keyboard, String intString) { 

     int strsize = intString.length(); 
     int[] digits = new int[strsize]; 

     for (int i = 0; i < strsize; ++i) 
     { 
      String temp = Character.toString(intString.charAt(i)); 
      digits[i] = Integer.parseInt(temp); 
     } 

     for (int i = strsize - 1; i >= 0; --i) 
     { 
      System.out.print(digits[i]); 
     } 
    } 

    //Extracts even numbers. 
    public static void even (Scanner keyboard2, String intString2) { 

     int strsize2 = intString2.length(); 
     int[] digits2 = new int[strsize2]; 

     for (int i = 0 ; i < strsize2 ; ++i) { 

       String temp = Character.toString(intString2.charAt(i)); 
       digits2[i] = Integer.parseInt(temp); 

       if(digits2[i] % 2 == 0) { 
       System.out.print(digits2[i] + " "); 
      } 
     }           
    } 

    //Extracts odd numbers. 

    public static void odd (Scanner keyboard3, String intString3) { 

     int strsize3 = intString3.length(); 
     int[] digits3 = new int[strsize3]; 

     for (int i = 0 ; i < strsize3 ; ++i) { 

       String temp = Character.toString(intString3.charAt(i)); 
       digits3[i] = Integer.parseInt(temp); 

       if(digits3[i] % 2 != 0) { 

       System.out.print(digits3[i] + " ");        
      } 
     }           
    } 

    //Allows continuous input. 

    public static void main(String[] args) {     

     Scanner keyboard = new Scanner(System.in); 

     boolean validate = true;    
     while (validate) { 
     validate(keyboard); 

     boolean invalid = true;                  
     while (invalid) { 
      System.out.println("Would you like to try another calculation? [y/n]");    

      Scanner input = new Scanner(System.in); 
      char answer; 
      String option = input.next(); 

      if ("y".equalsIgnoreCase(option)) {       
       invalid = false; 
      } 
      else if ("n".equalsIgnoreCase(option)) {      
       invalid = false; 
       validate = false; 
        System.out.println("Goodbye.");    
        input.close(); 
      } 
      else {                     
       System.err.println("The only valid answers are y/n."); 
       System.out.println(); 
      } 
      } 
     } 
    } 
} 
+0

您从不使用您的'PrintWriter'来打印除原始数字之外的任何东西。因此,这就是您在输出文件中看到的所有内容。 –

+1

欢迎来到Stack Overflow!我会想象这95%的代码与你的问题无关。请创建一个[**最小**,完整且可验证的示例](http://stackoverflow.com/help/mcve),以说明您的问题。 –

+0

来自'System.out'的输出是你期望的吗?如果是这样,为什么不把你的'PrintWriter'传递给其他方法,并以与第一行相同的方式写入? – petehallw

回答

0

我已经测试了下面的c ode用于将反向编号写入文件。您可以将相同的技术应用于其他方法。注意我正在使用PrintWriter.print而不是PrintWriter.println来获取同一行上的所有数组元素。

public class Order { 

    PrintWriter outputfile; 
    FileWriter writer; 

    public void validate(Scanner input) { 

     String userEntry;  

     System.out.println("Please enter a positive integer greater than 0."); 
     userEntry = input.nextLine(); 

     while (!userEntry.matches("^[1-9][0-9]*$")) { 
      System.out.println("Invalid number. Try again"); 
      userEntry = input.nextLine(); 
     } 

     try { 
      writer = new FileWriter("outDataFile.txt", true); 
      outputfile = new PrintWriter(writer); 

      outputfile.println("Your original number was: "); 
      outputfile.println(userEntry); 
      outputfile.flush(); 
      System.out.println("Your original number was: "); 
      System.out.println(userEntry); 

      System.out.println("The reversed digits are: "); 
      outputfile.println("The reversed digits are: "); 
      reverse (input, userEntry, writer); 
      System.out.println(); 

     } catch (IOException e){    
     }    
    } 

    //Reverses the order of digits. 
    public void reverse(Scanner keyboard, String intString, FileWriter writer) { 

     outputfile = new PrintWriter(writer); 

     int strsize = intString.length(); 
     int[] digits = new int[strsize]; 

     for (int i = 0; i < strsize; ++i) 
     { 
      String temp = Character.toString(intString.charAt(i)); 
      digits[i] = Integer.parseInt(temp); 
     } 

     for (int i = strsize - 1; i >= 0; --i) 
     {   
      System.out.print(digits[i]); 
      outputfile.print(digits[i]); 
      outputfile.flush(); 
     } 
    } 
} 
+0

谢谢。这有很多帮助。 – Navi4458

+0

@ Navi4458太棒了!冲洗'PrintWriter'是非常重要的一步。如果您对此感到满意,您可以将答案标记为已接受吗? – petehallw

0

问题出在您的try区块。

错误:

outputfile.println("Your original number was: "); 
     outputfile.println(userEntry); 
     System.out.println("Your original number was: "); 
     System.out.println(userEntry); 

    System.out.println("The reversed digits are: "); 
    reverse (input, userEntry); 
    System.out.println(); 

    System.out.println("The even digits are: "); 
    even (input, userEntry); 
    System.out.println(); 

    System.out.println("The odd digits are: "); 
    odd (input, userEntry); 
    System.out.println(); 

问题:你几乎有'与outputfile.println小号的

正确反映System.out.println

outputfile.println("Your original number was: "); 
outputfile.println(userEntry); 
System.out.println("Your original number was: "); 
System.out.println(userEntry); 

System.out.println("The reversed digits are: "); 
reverse (input, userEntry); 
System.out.println(); 
outputfile.println("The reversed digits are: "); 
reverse (input, userEntry); 
outputfile.println(); 


System.out.println("The even digits are: "); 
even (input, userEntry); 
System.out.println(); 
outputfile.println("The even digits are: "); 
even (input, userEntry); 
outputfile.println(); 

System.out.println("The odd digits are: "); 
odd (input, userEntry); 
System.out.println(); 
outputfile.println("The odd digits are: "); 
odd (input, userEntry); 
outputfile.println(); 
+0

哦,不,我明白那个。我现在的问题是我的数组没有被写入文本文件。我编辑了输出示例和正在编写的内容。希望我已经让我的问题更清楚一点。 – Navi4458

+0

@ Navi4458也许你必须添加一个方法来命名奇数赔率,或者一个方法来命名偶数,并写出outputfile.println(“奇数是:”+赔率);和outputfile.println(“偶数位是:”+ evens); – CodingNinja

+0

@ Navi4458谢谢你的方式澄清 – CodingNinja