Нужна помощь
Вот собственно код:
package Sortarray;
public class Sorting {
public static void main (String[] args)
{
}
public static void formethod ()
{
double a [] = new double [] {0,1.5,16,-1.5,663,-30,7,3,8,1,2};
int i;
double t=0;
for (i=0; i<a.length; i++)
{ if(a>=a[i+1]);
t=a;
a=a[i+1];
a[i+1]=t;
System.out.println(a);
}
/*for (j=0; j<a.length; j++)
{ if a[j+1]<=a[j];*/
}
Программа запускается без ошибок, но ... ничего не выводит. Кто более опытный - прошу помочь. Спасибо.
скажите, что делает функция public static void main (String[] args) ?
{
foreach($array as $key=>$var)
{
echo "$var";
}
}
function bubbleSort($array)
{
$size = count($array)-1;
$arr = $array;
sort($arr, SORT_NUMERIC);
while($arr != $array)
{
for($i=0; $i<$size; $i++)
{
$left = $i;
$right = $i+1;
if($array[$left] > $array[$right])
{
$first = $array[$right];
$second = $array[$left];
$array[$i] = $first;
$array[$i+1] = $second;
}
}
display($array);
echo "</br>";
if($arr == $array)
{
return false;
}
}
}
$sort = array(3,5,2,9,8,1,6,4,7);
display($sort);
echo "</br>";
bubbleSort($sort);
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import static java.lang.System.out;
import java.util.ArrayList;
import java.util.Collections;
/**
*
* @author Admin
*/
public class ExBubSort {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ArrayList<Integer> sort = new ArrayList<Integer>();
Collections.addAll(sort, 3,5,2,9,8,1,6,4,7);
out.println("Not sorted list"+sort.toString());
out.println("Sorting process");
ExBubSort example = new ExBubSort();
example.bubbleSort(sort);
}
void bubbleSort(ArrayList<Integer> list)
{
int size = list.size()-1;
ArrayList<Integer> arr = (ArrayList<Integer>) list.clone();
java.util.Collections.sort(arr);
while(!arr.equals(list))
{
for(int i=0; i<size; i++)
{
int left = i;
int right = i+1;
int first;
int second;
if((int)list.get(left) > (int)list.get(right))
{
first = (int)list.get(right);
second = (int)list.get(left);
list.set(left, first);
list.set(right, second);
}
}
out.println(list);
out.println("");
if(arr.equals(list))
{
break;
}
}
}
}
скажите, что делает функция public static void main (String[] args) ?
Ну, насколько я нашел ее описание, то она является базовой точкой входа, для выполнения любой программы, без объявления этого метода, программа работать не будет.
Просто не пойму, где зарыта собака.
Ну так и вы осознали что это значит? )
Если я Вас правильно понял, все объявленные за Main () методы, нужно вызывать в теле Main
У меня теперь другая проблема, я переписал код, но не могу вывести принтлайном массив b, потому что Main ее не видит, эту переменную b я выделил курсивом
package Sortarray;
import java.lang.System.*;
public class Sorting {
public static void main (String[] args)
{
Sorting vivod=new Sorting();
System.out.println(vivod.ForMethod(b));
}
public void ForMethod(double b [])
{
double a [] = new double [] {0,1.5,16,-1.5,663,-30,7,3,8,1,2};
int i;double t;
do
{for (i=0; i<i+1; i++)
{ if (a<=a[i+1]);
do {continue;}
while (a>=a[i+1]);
if (a>=a[i+1]||a[i+1]<=a[0]);
t=a[0];
a[0]=a[i+1];
a[i+1]=a;
t=a[1];
System.arraycopy(b, 0, a, 0, a.length);
}
}
while (i<a.length-1);
}
}
У вас метод делает работу, после чего завершается. Вам надо вернуть массив.
Читайте про return и что такое void.
Нет не правильно. С Main - начинается выполнение программы и в ней же заканчивается. Все что написано в Main - выполнится. Все вызовы методов будут вызваны и все.
И да, полистайте первые 100 страниц учебника.
Спасибо почитаю и объявлю b отдельно.
Ну я так и думал, что return не возвращает массив.
Я как раз и хотел вернуть массив в функцию ForMethod c выводом на печать.
Т.е. по моей логике принтлайн должен был бы при выводе на печать ForMethod, который я подцепил на vivod вывести именно массив, который бы вернулся через return при вызове ForMethod.
А вот
int[] ForMethod() {
int[] k = new int[2];
return k;
}
верно
При варианте 1- массив сортируется по возрастанию, при 2- по убыванию
Единственное, хотел сделать чтобы при вводе других вариантов, например 0 или больше 2, вместо перехода на строчку
"Вы ввели неверный вариант, сортировка не произойдет"
Программа осуществляла бы возврат на ввод вариантов.
Т.е. переходила на строчку: System.out.println("Введите 1 - по возростанию, 2- по убыванию:")
Как это можно сделать? Спасибо
package Sortarray;
import java.lang.System.*;
import java.lang.String.*;
public class BubbleSorting {
public static void main (String[] args) throws Exception
{
//обьявление начального массива а, счетчика i j, временной t
double a [] = new double [] {0,1.5,16,-1.5,663,-30,7,3,8,1,2};
int i,j,c = 0; double t; povtor:;
//String kl;
//BufferedReader read= new BufferedReader(new InputStreamReader(System.in));
System.out.println("Количество элементов:"+a.length);
System.out.println("До сортировки:");
for (i=0; i<a.length;i++)
System.out.println ("a"+i+"="+a);
povtor:System.out.println("Введите 1 - по возростанию, 2- по убыванию:");
System.out.println ("Введите вариант:");
c=System.in.read();
while (c==49||c==50)
{ System.out.println("Вы ввели:"+" "+ (char)c );
if ( c==49)
System.out.println ("Вы выбрали сортировку по возрастанию");
if(c==50)
System.out.println ("Вы выбрали сортировку по убыванию");
//else if(c!=49)
switch (c)
{ case 49:
{ System.out.println("Сортируем по возрастанию:");
for (i=0; i<a.length-1;i++)
for (j=0; j<a.length-1;j++)
{
if (a[j]>=a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
break;
}
case 50:
{ System.out.println("Сортируем по убыванию:");
for (i=0; i<a.length-1;i++)
for (j=0; j<a.length-1;j++)
{
if (a[j]<=a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
break;
}
}
break;
}
if (c<49||c>50)
{System.out.println ("Вы ввели неверный вариант, сортировка не произойдет");
}
System.out.println ("После сортировки");
for (i=0; i<a.length;i++)
System.out.println ("a"+i+"="+a);
}
}
while (c<49 || c>50)
{
System.out.println ("Введите вариант:");
c=System.in.read();
}
while (c<49 || c>50)
{
System.out.println ("Введите вариант:");
c=System.in.read();
}
arjj Cпасибо. А просто передать управление на ту строку с которой начинается ввод варианта никак нельзя?
так поидее должно работать. goto в java нет
Читал, что метки работают только в циклах типа for do while при передаче управления в цикл по условию внутри цикла.
{
System.out.println("Введите 1 - по возростанию, 2- по убыванию:");
System.out.println ("Введите вариант:");
c=(char)System.in.read();
System.out.println("Вы ввели:"+" "+ c );
if ( c=='1')
System.out.println ("Вы выбрали сортировку по возрастанию");
if(c=='2')
System.out.println ("Вы выбрали сортировку по убыванию");
else break povtor;
Но повтор почему-то не выполняется все равно
И вообще continue решает.
Через continue заработало, спасибо.
Этот кусок кода я хочу объединить с уже готовым кодом сортировки.
В общем попытался написать так:
import java.io.*;
import java.lang.System.*;
public class BubbleSorting {
static int i,j; static char c; static double t,count; static int m; static double []a=new double[1];
//Заполнения массива значениями Введенными с клавиатуры
public static void main (String[] args) throws IOException
{ int length=a.length;
System.out.println("Введите массив целых чисел, чтобы закончить ввод - введите англ. b");
//BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
for (int k=0;count!='b';k++)
{
a[k]=count=System.in.read();
System.out.println("a"+k+"="+a[k]);
length=a.length+1;
a=new double[length];
}
Sortirovka(a);
}
Ну дальше погнал работать метод сортировки.
Ввод значений происходит и здесь во-первых:
Ф-я read() возвращает символьные значения и сразу переводит их в символьный код, к примеру я ввожу "1", System.out.println("a"+k+"="+a[k]); выводит 49. Ну прочитал, что она работает по такому принципу, ладно.
Во-вторых непонятно почему автоматически заполняется следующий за уже заполненным элементом элемент массива, например если а[0]=49(целочисленное зн. от введенного "1"), то a[1] автоматически заполняется как 10.0, если a[2], к примеру "2" или код 50 то a[3] =10.0 и т.д.
Кто может что-то подсказать, в чем есть ошибки и где сделать исправления?
BufferedReader is = new BufferedReader(
new InputStreamReader(System.in));
line = is.readLine();
val = Integer.parseInt(line);
} catch (NumberFormatException ex) {
System.err.println("Not a valid number: " + line);
} catch (IOException e) {
System.err.println("Unexpected IO ERROR: " + e);
}
Или
int totalDigitsNumber = s.nextInt();