Java fájlbeolvasás

Címkék
Java fájlbeolvasás
2022-03-27T23:21:08+02:00
2022-03-28T20:12:07+02:00
2022-10-15T21:21:27+02:00
teki19
Egy szöveges fájl minden sorában található egy egész szám, majd szóközzel elválasztva egész számok vesszővel elválasztott listája. Olvassa be a fájl sorait, majd döntse el, hogy az egész számok listájában van-e két olyan egész szám, amelyek összege az első oszlopban lévő szám.Az eredményeket írja ki egy szöveges fájlba: soronként a szám, amely összeg-felbontását keressük, majd szóközzel elválasztva a két listabeli szám, amelyek összege a vizsgált szám; ha nincs a listában két megfelelő egész, akkor a "none" sztringet írja a szám mellé.

Például:
in.txt:
7 2,5,-7,6,9
-2 2,5,-7,6,9
12 2,5,-7,6,9
out.txt:
7 2 5
-2 5 -7
12 none

Hogyan tudnám minden sor első számát külön beolvasni, mivel így belefutok az Illegal hibakódba a rossz bemenet miatt? Valaki tudna ebben segíteni ? 
Illetve az első példára jó eredményt ad ki csak fordítva írja ki a számokat, a második példára pedig none-t ad ki, ami rossz eredmény. Nem sikerült rájönnöm mi a hiba. Tudnátok benne segíteni ?

import java.io.*; public class feladat{ public static void main (String[] args){ try(BufferedReader br = new BufferedReader(new FileReader ("in.txt")); BufferedWriter bu = new BufferedWriter(new FileWriter ("out.txt"));){ String line = null; while(null!= (line = br.readLine())){ String[] nums = line.split(","); int par1 = 0; int par2 = 0; String elso= nums[0]; Boolean van = false; for(int i= 1; i< nums.length;i++){ for(int j=2; j < nums.length; j++){ if( Integer.parseInt(elso) == i+j){ par1 = i; par2 = j; van= true; } } } if (van==true){ System.out.println(elso + " " + par1 + " " + par2); bu.write(elso + " " + par1 + " " + par2 + "\n" ); } else{ System.out.println(elso + " none"); bu.write(elso + " none" + "\n" ); } } }catch(IllegalArgumentException e){ System.out.println("Illegal"); }catch(FileNotFoundException e){ System.out.println("Couldn't find in.txt"); }catch(IOException e){ System.out.println("Couldn't read line"); } } }
Mutasd a teljes hozzászólást!
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class NumberControl { private final String INPUT_FILE_PATH = "in.txt"; private final String OUTPUT_FILE_PATH = "out.txt"; private List<NumberStructure> numberLines; class NumberStructure { private Integer baseNumber; private List<Integer> numbers; public NumberStructure(String baseNumberStr, String[] numbersStr) { this.baseNumber = Integer.parseInt(baseNumberStr); this.numbers = new ArrayList<>(); for(String numStr: numbersStr) { this.numbers.add(Integer.parseInt(numStr)); } } public Integer getBaseNumber() { return baseNumber; } public void setBaseNumber(Integer baseNumber) { this.baseNumber = baseNumber; } public List<Integer> getNumbers() { return numbers; } public void setNumbers(List<Integer> numbers) { this.numbers = numbers; } public String getAdditionResult() { if(baseNumber != null && numbers != null && !numbers.isEmpty() && numbers.size() > 1) { for(int i = 0; i < numbers.size(); i++) { for(int j = i+ 1; j != numbers.size(); j++) { if(numbers.get(i) + numbers.get(j) == baseNumber) { return baseNumber + " " + numbers.get(i) + " " + numbers.get(j); } } } } return baseNumber + " none"; } } public static void main(String[] args) { NumberControl numberControl = new NumberControl(); numberControl.readFile(); //console test numberControl.numberLines.forEach(element -> { System.out.println(element.getAdditionResult()); }); numberControl.writeFile(); } private void readFile() { numberLines = new ArrayList<>(); try (Scanner scanner = new Scanner(new File(INPUT_FILE_PATH))) { while (scanner.hasNextLine()) { String line = scanner.nextLine(); String[] lineNumbers = line.split("\s+"); String[] numbers = lineNumbers[1].split(","); numberLines.add(new NumberStructure(lineNumbers[0], numbers)); } } catch (Exception ex) { ex.printStackTrace(); } } private void writeFile() { StringBuilder fileContent = new StringBuilder(); numberLines.forEach(element -> { fileContent.append(element.getAdditionResult()).append("\n"); }); BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(OUTPUT_FILE_PATH)); writer.write(fileContent.toString()); } catch (IOException ex) { ex.printStackTrace(); } finally { try { writer.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }
Mutasd a teljes hozzászólást!

  • Miután a br.readLine()-nal beolvastad a sort, szóköz mentén split-elj. Az eredmény egy kételemű tömb, amelynek második elemét vessző mentén tovább split-eled.
    Mutasd a teljes hozzászólást!
  • import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class NumberControl { private final String INPUT_FILE_PATH = "in.txt"; private final String OUTPUT_FILE_PATH = "out.txt"; private List<NumberStructure> numberLines; class NumberStructure { private Integer baseNumber; private List<Integer> numbers; public NumberStructure(String baseNumberStr, String[] numbersStr) { this.baseNumber = Integer.parseInt(baseNumberStr); this.numbers = new ArrayList<>(); for(String numStr: numbersStr) { this.numbers.add(Integer.parseInt(numStr)); } } public Integer getBaseNumber() { return baseNumber; } public void setBaseNumber(Integer baseNumber) { this.baseNumber = baseNumber; } public List<Integer> getNumbers() { return numbers; } public void setNumbers(List<Integer> numbers) { this.numbers = numbers; } public String getAdditionResult() { if(baseNumber != null && numbers != null && !numbers.isEmpty() && numbers.size() > 1) { for(int i = 0; i < numbers.size(); i++) { for(int j = i+ 1; j != numbers.size(); j++) { if(numbers.get(i) + numbers.get(j) == baseNumber) { return baseNumber + " " + numbers.get(i) + " " + numbers.get(j); } } } } return baseNumber + " none"; } } public static void main(String[] args) { NumberControl numberControl = new NumberControl(); numberControl.readFile(); //console test numberControl.numberLines.forEach(element -> { System.out.println(element.getAdditionResult()); }); numberControl.writeFile(); } private void readFile() { numberLines = new ArrayList<>(); try (Scanner scanner = new Scanner(new File(INPUT_FILE_PATH))) { while (scanner.hasNextLine()) { String line = scanner.nextLine(); String[] lineNumbers = line.split("\s+"); String[] numbers = lineNumbers[1].split(","); numberLines.add(new NumberStructure(lineNumbers[0], numbers)); } } catch (Exception ex) { ex.printStackTrace(); } } private void writeFile() { StringBuilder fileContent = new StringBuilder(); numberLines.forEach(element -> { fileContent.append(element.getAdditionResult()).append("\n"); }); BufferedWriter writer = null; try { writer = new BufferedWriter(new FileWriter(OUTPUT_FILE_PATH)); writer.write(fileContent.toString()); } catch (IOException ex) { ex.printStackTrace(); } finally { try { writer.close(); } catch (IOException ex) { ex.printStackTrace(); } } } }
    Mutasd a teljes hozzászólást!
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd