Wątek przeniesiony 2014-06-07 19:41 z Java przez bogdans.

Zadanie dotyczące operacji na tablicach wielowymiarowych

0

Witam, czy ktoś pomógłby mi rozwiazać takie zadanie w NetBeans, jeszcze jesli byłby ktoś życzliwy podrzucic jakis tutorial/kurs z zadaniami z tablicami wielowymiarowymi. Tresc zadania brzmi nastepujaco:

Utwórz aplikacje konsolowa w ktorej zostanie utworzona tablica liczb typu int o 4 wierszach i 6 kolumnach. Elementy tablicy powinny byc losowane z przedzialu (A, 3A) gdzie liczba dodatnia A jest pierwszym argumentem programu.

  • wyswietl dzisiejszą date
  • wyswietl elementy tablicy wierszami stosujac jako znak podzialu spację
  • oblicz i wyswietl sumę elementow wiekszych od 2A w przedostatnim wierszu tablicy
  • pobierz nazwę pliku z drugiego argumentu programu
  • zapisz do pliku tekstowego o pobranej nazwie zawartosc tablicy oraz wynik obliczen w nastepnym wierszu
  • poszczegolne dane poprzedź odpowiednimi opisami

Dziękuje i pozdrawiam.

poprawienie tytułu wątku, dodanie tagów oraz znacznika <quote> - furious programming

0

A jakąś polską stronę polecasz?

0

Czytałem juz wczesniej to co wysłałeś, ale nadal nie potrafie zrobic w calości tego zadania ;/

0

WItam, znalazłem czas aby sam się zająć, lecz wiecej nie potrafie zrobić, czy mogłby ktos poprawić/dokończyć?

package tablica2;

import java.io.FileWriter;
import java.util.Random;

/**
 *
 * @author Mateusz
 */
public class Tablica2 {

    public static void main(String[] args) {
        
        System.out.println("10 czerwca");
        String a=(args[1]);
        int b = Integer.parseInt(args[0]);
        int p=0;
        int[][] T = new int[4][6];
        try{
        Random r = new Random();
        FileWriter f=new FileWriter(a+".txt");
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 6; j++) {
                T[i][j] = r.nextInt(**NIE WIEM JAK ZROBIĆ PRZEDZIAŁ LOSOWANIA**);
                System.out.print(T[i][j] + ", ");
                f.write(T[i][j]+ " ");
                if (i== 4) {
                   (**NIE WIEM JAK ZROBIĆ ABY SUMOWAŁ SUME ELEMENTÓW WIEKSZYCH OD 2A**) {
                        
                    }
                }
            }
            System.out.println();
            
        }
        f.close();
        }catch(Exception e){}
        System.out.println();
System.out.println("Obliczenia "+p);
    }

}

dodanie znacznika <code class="java"> - furious programming

0
System.out.println("10 czerwca");

To nie jest wyświetlenie dzisiejszej daty, to jest wyświetlenie daty "10 czerwca", rozumiesz różnicę?

0

Tak

System.out.println(" ");

zwraca nam po prostu to co wpiszemy w cudzysłów. W zadaniu chodzi o wyświetlanie napisu, nie sprawdzanie i wpisanie daty ;)

dodanie znacznika <code class="java"> - furious programming

1

Moim zdaniem program ma wypisać datę uruchomienia programu, nie wiadomo natomiast jaki format daty jest wymagany.

import java.io.FileWriter;
import java.util.*;
 
/**
 *
 * @author Mateusz
 */
public class Tablica2 {
 
    public static void main(String[] args) {
 
        System.out.println("Dzisiejsza data: "+new GregorianCalendar().getTime());
        if(args.length<2)
        {
             System.out.println("Program wymaga dwoch argumentow: liczba i nazwa zbioru");
             System.exit(0);
        }
        String a=(args[1]);
        int b = 5; //wartość domyślna
        try
        {
            b = Integer.parseInt(args[0]); //nie sprawdzam czy podana liczba jest dodatnia
        }
        catch(NumberFormatException e)
        {
        }
        int suma = 0;
        int[][] T = new int[4][6];
        try{
        Random r = new Random();
        FileWriter f=new FileWriter(a+".txt");
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 6; j++) {
                T[i][j] = (b+1)+r.nextInt(r.nextInt(2*b-1)); //zakładam, że chodzi o przedział otwarty
                System.out.print(T[i][j] + ", ");
                f.write(T[i][j]+ " ");
                if ((i==2) && (T[i][j]>2)) { //i==4 to jakiś absurd
                   (**NIE WIEM JAK ZROBIĆ ABY SUMOWAŁ SUME ELEMENTÓW WIEKSZYCH OD 2A**) {
                         //sumować chyba umiesz
                    }
                }
            }
            System.out.println();
 
        }
        f.close();
        }catch(Exception e){}
        System.out.println();
System.out.println("Obliczenia "+p);
    }
 
}
0

Dzięki serdeczne, o to mi chodziło :) Mam jeszcze jedno pytanie, jak się zmieni kod gdy w zadaniu będzie trzeba utworzyć tablicę typu double a nie int?

0
double[][] T = new double[4][6];

a do losowania metoda nextDouble

0

I właśnie w tym mam problem, ponieważ tak już próbowałem ale gdy zmieniam z metody nextInt na nextDouble nie chce sie wtedy kompilować

0

A tym zmiennej suma też zmieniłeś? Losowanie powinno teraz wyglądać tak:

T[i][j] = b+2*b*r.nextDouble();
0

Tak, zmieniłem wszystkie zmienne z int na double w tym sumę również.

0
import java.io.FileWriter;
import java.util.*;
 

public class Tablica2 {
 
    public static void main(String[] args) {
 
        System.out.println("Dzisiejsza data: "+new GregorianCalendar().getTime());
        if(args.length<2)
        {
             System.out.println("Program wymaga dwoch argumentow: liczby i nazwa zbioru");
             System.exit(0);
        }
        String a=(args[1]);
        double b = 5; //wartość domyślna
        double p = 0;
        try
        {
            b = Double.parseDouble(args[0]); //nie sprawdzam czy podana liczba jest dodatnia
        }
        catch(NumberFormatException e)
        {
        }
        double suma = 0;
        double[][] T = new double[4][6];
        try{
        Random r = new Random();
        FileWriter f=new FileWriter(a+".txt");
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 6; j++) {

                
                T[i][j] = r.nextDouble(b+1+r.nextDouble(2*b-1)); //zakładam, że chodzi o przedział otwarty
                System.out.print(T[i][j] + ", ");
                f.write(T[i][j]+ " ");
                if ((i==2) && (T[i][j]>2)) { //i==4 to jakiś absurd
               
                }
            }
            System.out.println();
 
        }
        f.close();
        }catch(Exception e){}
        System.out.println();
System.out.println("Obliczenia "+p);
    }
 
}

w taki sposób zmieniłem na double i się nie kompiluje, gdzie jest błąd?

0

Przecież napisałem jak trzeba zmienić losowanie.

0

Czyli w metodzie nextDouble nie potrzbny jest random?

1

Skąd ten wniosek? Do losowania liczb typu double z przedziału [0,1) możesz użyć metody statycznej Math.double() z klasy Math, lub (ja tak zrobiłem) metody nextDouble() z klasy Random.

0

A możesz napisac w jaki sposob wybieramy przedział losowania? Co wpisujemy w nawiasie w r.nextDouble(????????????) ? Skoro mam przedział (3A , A) to jak zadeklarowac taki przedzial losowania?

0

Nic nie możemy wpisać. Spróbuj zrozumieć wyrażenie

T[i][j] = b+2*b*r.nextDouble();

.

0

To co oznacza "b+2b" skoro mam przedział losowania (3A, A) a zadeklarowałeś b = 5 ???

0

Ja zadeklarowałem b? Popatrz na swoje kody.

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