wrzucenie danych do tablicy

0

witam

Mam maly problem. Chciałbym wczytać z pliku txt wartości jako int:

4 6
7 8 9 5 4
8

wykonywać na nich operacje i wynik zapisywać w pliku wyjściowym, więc trzeba je przypisać do tabeli. Na razie wygląda to tak:

import java.io.*;

public
class te
{
public static void main (String args[])
throws IOException
    {
        FileReader fr = new FileReader("a.txt");
        BufferedReader br = new BufferedReader(fr);
        String s;
        String old = "";
        
        while((s = br.readLine()) != null)
            {
            System.out.println(s);
            old = old + s;
            }
    
        fr.close();
        
        FileWriter fw = new FileWriter("a2.txt");
        fw.write(old + "test ");
        fw.close();
    }
}

Proźba o wskazówki
0

Chodzi ci o tablicę? Jeśli nie wiadomo, ile tych wartości w pliku będzie, najpierw najlepiej stworzyć listę:

ArrayList<Integer> list = new ArrayList<Integer>();

W tym przypadku najwygodniej byłoby użyć klasy Scanner:

Scanner scanner = new Scanner(fileName);

No i wczytywać po kolei:

while (scanner.hasNextInt()) {
    list.add(scanner.nextInt());
}

No i potem ewentualnie wpisać to do tablicy:

list.toArray(array);

fileName to nazwa pliku wejściowego, array to tablica, do której wpisujemy dane

0

Chciałbym zeby dane wejsciowe byly wyswietlane w formacie np. 3 3 4 a nie :
3
3
4

public class test2 {
    
    public static void main(String args[]) throws IOException{
        Scanner scan= new Scanner(new File("a.txt"));
        ArrayList<Integer> list = new ArrayList<Integer>();
        while (scan.hasNextInt()){
            list.add(scan.nextInt());
                    }
     
    for(Integer firm:list){
        System.out.println(firm);
    }
    }
    

}
0
    for(Integer firm:list)
    {
        System.out.print(firm+" ");
    }
0

Nie do końca o to mi chodziło. Struktura pliku powinna wyglądać tak:
3 4 5
8 2 1 1 1
4

0

To zadawaj pytania precyzyjnie

Chciałbym zeby dane wejsciowe byly wyswietlane w formacie np. 3 3 4 a nie :
3
3
4

public class Test
{
    public static void main(String args[]) throws IOException
    {
        Scanner scan= new Scanner(new File("a.txt"));
        while (scan.hasNextLine())
        {
            ArrayList<Integer> list = new ArrayList<Integer>();
            String line=scan.nextLine();
            Scanner sc = new Scanner(line);
            while(sc.hasNextInt())
            {
                list.add(sc.nextInt());
            }
            for(Integer firm:list)
            {
                System.out.print(firm+" ");
            }
            System.out.println();
        }
    }
}
0

Dzieki.

Teraz chciałbym jeszcze wykonywać obliczenia na wartościach z tablicy.
W którym miejscu i w jaki sposób odwołać się do wartości?

0

W poprzednim kodzie nie możesz, zmienna list zawiera tylko liczby z ostatniego wiersza. Reszta poszła z dymem.

import java.util.*;
import java.io.*;
public class Test
{
    public static void main(String args[]) throws IOException
    {
        Scanner scan= new Scanner(new File("a.txt"));
        ArrayList<ArrayList<Integer>> liczby = new ArrayList<ArrayList<Integer>>();
        while (scan.hasNextLine())
        {
            String line=scan.nextLine();
            ArrayList<Integer> list=new ArrayList<Integer>();
            Scanner sc = new Scanner(line);
            while(sc.hasNextInt())
            {
                list.add(sc.nextInt());
            }
            for(Integer firm:list)
            {
                System.out.print(firm+" ");
            }
            System.out.println();
            liczby.add(list);
        }
        System.out.println(liczby.get(0).get(0));
    }
}

Musisz jakoś kontrolować argumenty metody get(), dla pierwszej argument musi być mniejszy od ilości wierszy w pliku, dla drugiej od ilości liczb w tym wierszu. Jeśli wystarczy Ci pamiętać liczby, a nie jest ważne z którego wiersza w pliku pochodzą, to zrób tak:

import java.util.*;
import java.io.*;
public class Test
{
    public static void main(String args[]) throws IOException
    {
        Scanner scan= new Scanner(new File("a.txt"));
        ArrayList<Integer> liczby = new ArrayList<Integer>();
        while (scan.hasNextLine())
        {
            String line=scan.nextLine();
            ArrayList<Integer> list=new ArrayList<Integer>();
            Scanner sc = new Scanner(line);
            while(sc.hasNextInt())
            {
                int k=sc.nextInt();
                list.add(k);
                liczby.add(k);
            }
            for(Integer firm:list)
            {
                System.out.print(firm+" ");
            }
            System.out.println();
        }
        System.out.println(liczby.get(3));
    }
}
0

Dla tablicy o strukturze poniżej
1 6
1 2 3 4
3
0 1
0 2
2 3
gdzie:
1 wiersz składa się z liczby wymiarów d i rozciągłości n
2 wiersz to wartości sektorów( od 0 do 3)
3 wiersz to liczba zapytań
Kolejne wiersze to pary dla których należy obliczyć Sumę wartości sektorów dla każdego wiersza
więc na wyjściu powinno być odpowiednio
3 bo (1+2)
6(bo 1+ 2 +3)
7(3+4)

Pomożcie napisać odp pętlę
Chyba ze ktoś zna inne rozwiązanie

import java.util.*;
import java.io.*;
public class Test
{
    public static void main(String args[]) throws IOException
    {
        Scanner scan= new Scanner(new File("a.txt"));
        ArrayList<ArrayList<Integer>> liczby = new ArrayList<ArrayList<Integer>>();
        while (scan.hasNextLine())
        {
            String line=scan.nextLine();
            ArrayList<Integer> list=new ArrayList<Integer>();
            Scanner sc = new Scanner(line);
            while(sc.hasNextInt())
            {
                list.add(sc.nextInt());
            }
            for(Integer firm:list)
            {
                System.out.print(firm+" ");
            }
            System.out.println();
            liczby.add(list);
        }
        for(...){
        System.out.println(SUM);
        }
    }
}
0

Ja bym może i pomógł, ale nie rozumiem do czego służy pierwszy wiersz i dlaczego jest tak

6(bo 1+ 2 +3)

        for(int i=3;i<3+liczby.get(2).get(0);i++)
        {
            int suma=0;
            for(int j=0;j<liczby.get(i).size();j++)
            {
                suma+=liczby.get(1).get(liczby.get(i).get(j));
            }
            System.out.println(suma);
        }
0

aby otrzymać 6 bierzemy wartości o indeksach w tablicy 0 i 2 ( krańcowe jak te co i w srodku czyli 1)
Pozostąłe są w porządku
mam nadzieję że wyraziłem się jasno

pozdr i z gory dzięki za pomoc

0

Pierwszy wiersz mało istotny

6 bo dla pary 0 2 ( bierzemy wartości nie tylko o indeksach krancowych(0,2) ale też wewnętrznych czyli1)
stad 1 +2+3

Z góry dzięki za pomoc

Pozdr

0
        for(int i=3;i<3+liczby.get(2).get(0);i++)
        {
            int suma=0;
            for(int j=liczby.get(i).get(0);j<=liczby.get(i).get(1);j++)
            {
                suma+=liczby.get(1).get(j);
            }
            System.out.println(suma);
        }
0

Prawie idealnie. Struktura rzeczywista pliku wejściowego wygląda tak:

1 10
1 1 2 2 3 3 4 4 5 5
8
0 1
0 2
0 3
0 4
4 5
6 7
8 9

Wyjście wygląda tak:
2
4
6
9
6
8
10

Powinno
1 - problem jest z 1 opisuje ją para liczb 0 0 - wartość dla 0 = 1 trzeba wykluczyć w tym przypadku sumowanie wartości
2
4
6
9
6
8
10

0

Działa zle wrzuciłem dane.
Pozdr

0

studentka_90 napisala:
Działa zle wrzuciłem dane.
:-O

0

Witam, jak napisać w tablicy kod który pokazuje indeks tablicy gdzie znajduje się np największa liczba? Proszę o pomoc i dzieki z gory

1 użytkowników online, w tym zalogowanych: 0, gości: 1